У меня есть веб-сервер на базе apache, который меня вызывают для обслуживания несколько раз в год. Для этого у меня есть локальное зеркало, чтобы я мог делать то, что требуется, а затем загружать изменения.
Я не знаю ' Я долгое время использовал apache для чего-то еще, и, поскольку я обновил свою рабочую станцию с последнего раза, мне пришлось установить его. У меня есть файл .conf
, который я помещаю в /etc/httpd/conf.d
, и это никогда не было проблемой в прошлом.
Последняя версия apache, которую я использовал было вероятно 2.2, поэтому на этот раз с 2.4.18 я получил предупреждение об обесценивании NameVirtualHost
, но фактический раздел
казался в порядке .
Пока я не добрался до той части, над которой я должен работать, набор скриптов .cgi
. Внутри VirtualHost .conf у меня есть:
<VirtualHost *:80>
DocumentRoot /mnt/lan/foo/bar
ServerName hullabaloo.mirror
<Directory /mnt/lan/foo/bar/cgi-bin>
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
[...]
</VirtualHost>
В этом каталоге есть .htaccess
с тем же эффектом ( Options + ExecCGI
), который существует, потому что фактический производственный сервер настроен для этого (не мой отдел).
В любом случае, как уже упоминалось, большинство ссылок в порядке. Однако форма, в которой используется сценарий .cgi
, возвращает 404, и в журналах я нахожу:
AH02811: script not found or unable to stat: /var/www/cgi-bin/search.cgi, referer: http://hullabaloo.mirror/search/index.html
Конечно, / var / www / cgi-bin
ничего нет. Он находится в / mnt / lan / foo / bar / cgi-bin
, который доступен для чтения процессом, а файл search.cgi
является исполняемым файлом всего мира. Это то же самое дерево, из которого были извлечены локальные ссылки, и именно так я попал на http: //hullabaloo.mirror/search/index.html
.
Ссылка на html-странице:
<form method="post" id="searchform" action="/cgi-bin/search.cgi">
Насколько я помню, все это работало нормально в последний раз, когда мне приходилось что-либо делать (около 6 месяцев назад); Я очень дотошный и внес бы изменения (это . conf
файл является только частью моего зеркала) и / или оставил примечания.
В чем проблема? В пути / mnt / lan / foo / bar
есть символическая ссылка, если это имеет значение для версии 2.4. Я еще не начал бросать дротики наугад.
Я просмотрел запрос, идущий от браузера к серверу, и он определенно использует http: //hullabaloo.mirror/cgi-bin/search .cgi
в качестве URL.
Я не знаю, было ли это в предыдущих версиях apache по умолчанию в основном файле /etc/httpd/conf/httpd.conf
или нет - это на самом деле из пакета Fedora.
<IfModule alias_module>
[...]
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the target directory are treated as applications and
# run by the server when requested rather than as documents sent to the
# client. The same rules about trailing "/" apply to ScriptAlias
# directives as to Alias.
#
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
Я понимаю, как это может быть связано с безопасностью в тех случаях, когда люди могут добавлять свои собственные файлы .htaccess
или .conf
, но могут ' Если изменить это, эти люди не должны запускать подпроцессы.
В любом случае, комментирование строки ScriptAlias
решило проблему.