Apache-2.4

nginx + apache2 代理通過,mod_perl 不工作

  • March 28, 2017

我正在嘗試讓 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 中的某些東西),我永遠不會知道。

無論如何,這個故事的寓意是檢查您嘗試呼叫的所有模組是否已實際安裝:)

引用自:https://serverfault.com/questions/841012