Как настроить директиву <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.

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