Нужен ли ScriptAlias в Apache 2, если путь определен в conf.d?
Я устанавливаю apcupsd в новой установке CentOS 7 под управлением Apache/2.4.6 (CentOS).
Я установил статус CGI для apcupsd, но продолжаю получать сообщение об ошибке при попытке получить доступ к странице с другой рабочей станции:
Forbidden
You don't have permission to access /apcupsd/upsstats.cgi on this server.
URL для него в локальной сети выглядит так:
http://mysite/apcupsd/upsstats.cgi?host=127.0.0.1&temp=F
Если я запускаю этот URL в веб-браузере на сервере, он работает нормально.
Итак, я подумал, что Apache не знает, что apcupsd находится в /var/www/apcupsd, поэтому мне лучше рассказать об этом.
Однако, когда я смотрю в /etc/httpd/conf.d, я вижу, что есть apcupsd.conf, который выглядит так:
#
# apcupsd configuration file for Apache Web server
#
# files are off the documentroot of Web server
Alias /apcupsd /var/www/apcupsd
<Directory /var/www/apcupsd>
AddHandler cgi-script cgi pl
Options ExecCGI
</Directory>
#
# Allow only local access at default
# Change the ".example.com" to match your domain or modify
# access rights to your needs to enable remote access also.
#
<Directory "/var/www/apcupsd">
DirectoryIndex upsstats.cgi
AllowOverride None
Options ExecCGI Indexes
<IfModule mod_authz_core.c>
# Apache 2.4
Require local
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
Итак, я вижу, что там уже есть сценарии, чтобы сказать, что / apcupsd это /var/www/apcupsd.
Все же это не работает для CGI, потому что я получаю сообщение об ошибке выше.
Нужно ли делать что-то еще, чтобы этот файл в conf.d загружался / выполнялся? Нужно ли редактировать /etc/httpd/conf/httpd.conf, если да, то зачем и зачем, потому что я вижу, что "псевдоним" делается в conf.d для apcupsd.conf. Похоже, это все на месте, и это должно работать.
Что я пропускаю?
1 ответ
Имея два Directory
разделы для одного и того же каталога - плохая идея в большинстве случаев, поэтому объединяйте их вместе. Например, у вас есть Options в обоих, так что один всегда будет переопределять другой, так как они оба устанавливают параметры абсолютно.
Проверьте журнал ошибок. Apache всегда что-то регистрирует, когда генерирует сообщение 403 Forbidden. Если в журнале ничего нет, то либо вы смотрите в неправильном журнале, либо ваш CGI сгенерировал сам 403 (на самом деле есть еще одна возможность, но это крайний случай, если у вас есть RewriteRule
с флагом "F").
Еще один комментарий, директива Require local
мне не подходит, так вы действительно используете Apache v2.4?