nginx + apache2 代理通过,mod_perl 不起作用

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 [错误] 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 中的某些内容)。

无论如何,这个故事的寓意是检查您尝试调用的所有模块是否都已实际安装:)

相关内容