nginx + pass de proxy apache2, com mod_perl não funcionando

1

Estou tentando fazer com que o mod_perl trabalhe no Apache / 2.4.18 (Ubuntu) . Aqui está o meu arquivo principal de configuração de domínio no 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>

Este código faz funcionar ... mas não com mod_perl. Então, estou fazendo o seguinte para ativar 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>

Eu reinicio o Apache2, e tento o site - e recebo um erro nginx:

2017/03/28 12:40:51 [error] 22738#22738: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 81.174.134.xx, server: test.pro, request: "GET /cgi-bin/trust/admin/admin.cgi HTTP/2.0", upstream: "http://127.0.0.1:8181/cgi-bin/trust/admin/admin.cgi", host: "test.pro"

Eu não entendo o que estou fazendo de errado: / Alguém pode lançar alguma luz sobre o que estou perdendo? Eu tenho isso funcionando bem em Apache / 2.4.17 (Debian) em outro servidor, então não consigo entender o que estou fazendo de errado aqui.

Obrigado!

ATUALIZAÇÃO: Mmm, então parece que está inicializando meu script que está causando o problema, mas não sei por quê. Se eu comentar esta linha, tudo funciona:

PerlRequire  /srv/www/test.pro/startup.pl

Eu não sei como, porque não recebo erros (ou até mesmo avisos!) ao parar / iniciar / reiniciar o Apache: /

** ATUALIZAÇÃO 2: **: estou chegando mais perto!

Can't load Perl file: /srv/www/test.pro/startup.pl for server test:0, exiting...

Eu verifiquei novamente, e é o caminho correto, e ele corre bem quando eu o executo com:

perl /srv/www/test.pro/startup.pl

... então estou um pouco perplexo a respeito de por que ele está reclamando!

    
por Andrew Newby 28.03.2017 / 13:50

1 resposta

1

Eugh, bem, eu não tenho certeza de como isso vai ser útil para qualquer um que se deparar com isso no futuro, mas vou postar de qualquer maneira - apenas no caso de ajudar alguém!

O problema foi que eu estava faltando literalmente 1 módulo: Apache :: DBI , que foi carregado por um dos scripts do carregador mod_perl chamados dentro de startup.pl.

Por que, oh, por que, na verdade, não poderia ter me dado um erro (ou algo no STDERR) que foi um pouco mais útil, eu nunca saberei.

De qualquer forma, a moral da história é verificar se TODOS os módulos que você está tentando chamar estão realmente instalados:)

    
por 28.03.2017 / 16:24