Назад | Перейти на главную страницу

прокси-сервер 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: **: Я подхожу ближе!

Не удается загрузить файл Perl: /srv/www/test.pro/startup.pl для тестирования сервера: 0, выход ...

Я дважды проверил, и это является правильный путь, и он отлично работает, когда я запускаю его с помощью:

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

... так что я немного сбит с толку, почему он жалуется!

Ну, я не уверен, насколько это будет полезно для тех, кто столкнется с этим в будущем, но я все равно отправлю его - на всякий случай, если это кому-то поможет!

Проблема заключалась в том, что мне не хватало буквально 1 модуля: Apache :: DBI, который был загружен одним из скриптов загрузчика mod_perl, который вызывается внутри startup.pl.

Почему, о, почему это не могло на самом деле дать мне ошибку (или что-то в STDERR), что было немного более полезным, я никогда не узнаю.

В любом случае, мораль этой истории - убедиться, что ВСЕ модули, которые вы пытаетесь вызвать, действительно установлены :)