Я пытаюсь заставить работать 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), что было немного более полезным, я никогда не узнаю.
В любом случае, мораль этой истории - убедиться, что ВСЕ модули, которые вы пытаетесь вызвать, действительно установлены :)