У меня есть веб-сервер на основе apache, который меня вызывают для обслуживания несколько раз в год. Для этого у меня есть локальное зеркало, чтобы я мог делать то, что требуется, а затем загружать изменения.
Я долгое время не использовал apache ни для чего другого, и, поскольку я обновил свою рабочую станцию с последнего раза, мне пришлось установить его. у меня есть .conf
файл, в который я захожу /etc/httpd/conf.d
и это никогда не было проблемой в прошлом.
Последняя версия apache, которую я использовал, вероятно, была 2.2, поэтому на этот раз с 2.4.18 я получил предупреждение об обесценивании NameVirtualHost
, но на самом деле <VirtualHost>
раздел казалось быть в порядке.
Пока я не добрался до той части, над которой нужно работать, набор .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
линия решила проблему.