Мы хотим создать веб-сайт только для демонстрационных целей, чтобы мы могли:
Кажется, мы достигли 2 и 3, но 1 не работает так хорошо, как мы думали, наши пользователи продолжали получать повторные запросы для имени пользователя и пароля HTTP Basic Auth, даже если они уже аутентифицированы и переходят на разные страницы веб-сайт. Мы заметили из журналов, что они получают следующее сообщение об ошибке при доступе к определенным ресурсам:
[Tue Jun 09 10:50:03.442834 2015] [access_compat:error] [pid 5740:tid 140705259312896] [client 78.52.242.163:62774] AH01797: client denied by server configuration: /var/www/docroots/stage/lib/yui/build/moodle-core-checknet/assets/checknet.txt, referer: http://stage.example.org/mod/scorm/player.php
Вот наш хост Apache:
<VirtualHost *:80>
ServerName stage.example.org
DocumentRoot /var/www/docroots/stage
<Directory /var/www/docroots/stage>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
# Only visible on Office network or anyone with a valid password.
AuthType Basic
AuthName "Authorisation Required"
AuthUserFile "/var/www/htpasswd"
Require valid-user
Order allow,deny
Allow from 202.161.24.210 127 ::1
Satisfy any
</Directory>
</VirtualHost>
Мы запускаем Apache 2.4.6 на CentOS 7. Правильна ли наша конфигурация? Похоже, наша конфигурация действительно работает для файлов верхнего уровня на /var/www/docroots/stage
а также другие изображения, файлы css и javascript в подкаталогах, которые находятся непосредственно под ним, но может ли случиться так, что он забывает HTTP-аутентификацию после определенного количества подкаталогов? SELinux находится в разрешающем режиме.
Без полного сообщения об ошибке (я бы ожидал, что модуль и IP-адрес) это немного предположение, но вы смешиваете директивы из двух разных модулей в Apache 2.4, Require
директива из mod-authz-core и "наследие" директивы Allow
и Order
из mod-access-compat, что может не очень хорошо складываться.
Вы можете попробовать заменить строки
Order allow,deny
Allow from 202.161.24.210 127 ::1
Со следующими
Require ip 202.161.24.210 127 ::1/128
С уже присутствующим Satisfy any
это должно соответствовать вашим требованиям.
Ваше третье требование:
Определенные части демонстрационного сайта должны будут отправлять запросы REST к себе ...
Возможно, доступ к серверу не осуществляется с адреса обратной связи, как вы ожидали, но он может быть настроен с полным доменным именем, аналогичным http://api.example.com/rest?
и исходят от публичного IP-адреса сервера.
Вы можете добавить общедоступные IP-адреса сервера, но это намного легче решить в Apache 2.4; то местный провайдер разрешает доступ к серверу, если выполняется одно из следующих условий:
Поэтому вместо перечисления обратных IP-адресов используйте:
Require valid-user
# Office Gateway:
Require ip 202.161.24.210
# API access from this host:
Require local
# Only one or more of the above needs to match:
Satisfy any