nginx + apache2 代理通過,mod_perl 不工作
我正在嘗試讓 mod_perl 在**Apache/2.4.18 (Ubuntu)**上工作。這是我在 Apache2 中的主要域配置文件:
<Virtualhost 0.0.0.0:8181> ServerName test DocumentRoot /srv/www/test.pro/www ErrorLog /srv/www/test.pro/logs/error.log <Directory "/srv/www/test.pro/www"> Options MultiViews FollowSymLinks AllowOverride all Require all granted </Directory> ScriptAlias /cgi-bin /srv/www/test.pro/www/cgi-bin <Directory "/srv/www/test.pro/www/cgi-bin"> AddHandler cgi-script .cgi AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted SetHandler cgi-script </Directory> <Location /> LimitRequestBody 5242880 </Location> </VirtualHost>
這段程式碼確實有效……但不適用於 mod_perl。因此,我正在執行以下操作來啟用mod_perl:
<Virtualhost 0.0.0.0:8181> LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so ServerName test DocumentRoot /srv/www/test.pro/www ErrorLog /srv/www/test.pro/logs/error.log ####### # Added for the mod_perl - startup.pl runs fine when run in command line manually # All the modules also exist PerlRequire /srv/www/test.pro/startup.pl PerlModule Apache2::Reload PerlInitHandler Apache2::Reload PerlModule Apache2::RequestRec ####### <Directory "/srv/www/test.pro/www"> Options MultiViews FollowSymLinks AllowOverride all Require all granted </Directory> ScriptAlias /cgi-bin /srv/www/test.pro/www/cgi-bin <Directory "/srv/www/test.pro/www/cgi-bin"> AddHandler perl-script .cgi AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted </Directory> <Location /> LimitRequestBody 5242880 </Location> </VirtualHost>
然後我重新啟動 Apache2,並嘗試該站點 - 並得到一個 nginx 錯誤:
2017/03/28 12:40:51
$$ error $$22738#22738:*4 連接()失敗(111:連接被拒絕),同時連接到上游,客戶端:81.174.134.xx,伺服器:test.pro,請求:“GET /cgi-bin/trust/admin/admin. cgi HTTP/2.0”,上游:“ http://127.0.0.1:8181/cgi-bin/trust/admin/admin.cgi ”,主機:“test.pro”
我不明白我做錯了什麼:/有人可以闡明我所缺少的嗎?我已經讓它在另一台伺服器上的*Apache/2.4.17 (Debian)*上執行良好,所以我無法弄清楚我在這裡做錯了什麼。
謝謝!
**更新:**嗯,所以似乎是啟動我的腳本導致了這個問題,但我不知道為什麼。如果我將此行註釋掉,一切正常:
PerlRequire /srv/www/test.pro/startup.pl
我不知道為什麼,因為在停止/啟動/重新啟動 Apache 時我沒有收到錯誤(甚至警告!):/
更新2::我越來越近了!
無法載入 Perl 文件:/srv/www/test.pro/startup.pl 用於伺服器測試:0,正在退出…
我仔細檢查了,這是正確的路徑,當我執行它時它執行良好:
perl /srv/www/test.pro/startup.pl
…所以我有點困惑為什麼它會抱怨!
呃,好吧,我不確定這對將來遇到它的任何人有多大幫助,但無論如何我都會發布它 - 以防萬一它對某人有所幫助!
問題是我實際上缺少 1 個模組:Apache::DBI,它是由在 startup.pl 中呼叫的 mod_perl 載入器腳本之一載入的。
為什麼哦,為什麼它實際上不能給我一個更有用的錯誤(或 STDERR 中的某些東西),我永遠不會知道。
無論如何,這個故事的寓意是檢查您嘗試呼叫的所有模組是否已實際安裝:)