Как настроить директиву <Location>, специфичную для Location/Directory на сервере Apache, а не на уровне сервера?
- Я новичок в конфигурации сервера Apache.
- Я просмотрел документацию Apache и попытался понять Основы, а также Директивы.
- Но все же я не могу определить конфигурацию, которая мне нужна для моего текущего сценария.
- Версия моего Apache Server 2.4.6 работает на Cent OS 7.5.
Мой текущий файл "httpd.conf". (Содержит только важные биты)
ServerRoot "/etc/httpd"
Listen 80
ServerAdmin root@localhost
ServerName 127.0.0.1
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Location />
AuthType shibboleth
ShibRequireSession On
Require valid-user
</Location>
<VirtualHost *:80>
ServerAdmin webmaster@myweb.com
DocumentRoot "/var/www/html/mywebsitecontent/"
ServerName myweb
</VirtualHost>
Проблема:
- В соответствии с приведенной выше конфигурацией, ввод " http://myweb/ " в URL-адресе браузера вызовет аутентификацию Shibboleth, настроенную в
<Location>
директивы. - Но в то же время, если я размещу любой другой сайт в
"/var/www/html/"
папка например сказать"demo"
Веб-сайт. - Теперь, если попытаться получить доступ к
demo
веб-сайт с http://127.0.0.1/demo/index.html, он также будет запускать Shibboleth Authentication из-за<Location />
конфигурации. И я не хочу этого. - Я хочу
<Location>
работать только на"/var/www/html/myweb/"
,
Что я попробовал:
<Location /myweb>
- Не работает- гнездование
<Location>
в<VirtualHost>
- Не работает
- Я не знаю, что я делаю не так.
- Любая идея / предложение / решение / правильное направление будет принята с благодарностью.
2 ответа
Согласно https://httpd.apache.org/docs/2.4/mod/core.html
<Location> sections operate completely outside the filesystem. This
has several consequences. Most importantly, <Location> directives
should not be used to control access to filesystem locations. Since
several different URLs may map to the same filesystem location, such
access controls may by circumvented.
Я думаю, вы хотите что-то ближе к этому:
<Directory "/var/www/html/myweb/">
AuthType shibboleth
ShibRequireSession On
Require valid-user
</Directory>
<VirtualHost *:80>
ServerAdmin webmaster@myweb.com
DocumentRoot "/var/www/html/mywebsitecontent/"
ServerName myweb
</VirtualHost>
редактировать: я думаю, что вы хотите добавить еще один конкретный VirtualHost для демонстрационного сайта.
<VirtualHost *:80>
ServerAdmin webmaster@myweb.com
DocumentRoot "/var/www/html/demo/"
ServerName demo
</VirtualHost>
<VirtualHost *:80>
<Directory "/var/www/html/myweb/">
AuthType shibboleth
ShibRequireSession On
Require valid-user
</Directory>
ServerAdmin webmaster@myweb.com
DocumentRoot "/var/www/html/mywebsitecontent/"
ServerName myweb
</VirtualHost>
Обратите внимание, что VirtualHost по умолчанию находится наверху. Так что, если вы заходите на сайт с http://127.0.0.1/ (обратите внимание, что ServerName будет 127.0.0.1, а не демо, не myweb), вы получите первый.
http://myweb/demo/
это подпапка http://myweb/
Так что ваши <Location />
покрывает это.
Вам нужно поставить <Location />
немного внутри VirtualHost
блокировать с ServerName myweb
, Быть вне любого VirtualHost
означает, что он вступает в силу для всех ваших серверов Apache.