Нужен ли 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?

Другие вопросы по тегам