![nginx + apache2 代理通过,mod_perl 不起作用](https://linux22.com/image/701459/nginx%20%2B%20apache2%20%E4%BB%A3%E7%90%86%E9%80%9A%E8%BF%87%EF%BC%8Cmod_perl%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我正在尝试让 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 [错误] 22738#22738: *4 connect() 连接到上游时失败(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:**:我离目标更近了一点!
无法为服务器测试:0 加载 Perl 文件:/srv/www/test.pro/startup.pl,退出...
我再三检查,是正确的路径,当我使用以下命令运行它时,它运行良好:
perl /srv/www/test.pro/startup.pl
...所以我有点困惑它为什么会抱怨!
答案1
唉,我不确定这对将来遇到它的人会有多大帮助,但我还是会发布它 - 以防它能帮助到别人!
问题是我确实缺少一个模块:Apache::DBI,它是通过 startup.pl 内部调用的 mod_perl 加载脚本之一加载的。
我永远都不会知道为什么它不能真正给我一个更有帮助的错误(或者 STDERR 中的某些内容)。
无论如何,这个故事的寓意是检查您尝试调用的所有模块是否都已实际安装:)