Чи має бути директива Apache Directory відносно DocumentRoot чи ні?


14

Чи Directoryмає бути директива Apache відносно DocumentRoot чи ні? Я запитую в контексті VirtualHost, але це не повинно мати ніякого значення.

Іншими словами, чи це повинно бути:

<VirtualHost>
    DocumentRoot /var/www
    <Directory /var/www>
    ...

або

<VirtualHost>
    DocumentRoot /var/www
    <Directory />
    ...

Обидва працюють. В Apache Довідник документи говорять:

Шлях до каталогу - це або повний шлях до каталогу, або рядок з макрою карткою ...

... але вони показують два приклади, що суперечать твердженню "повний шлях".

ED: Існують також суперечливі приклади на сторінці налаштування продуктивності Apache у розділах FollowSymLinks та SymLinksIfOwnerMatch та AllowOverride .

Для задоволення я подивився налаштування vhost Debian за замовчуванням і виявив це:

<VirtualHost *:80>
    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ...

Відповіді:


9

Документація правильна, а <Directory>директива повинна бути повним шляхом.

Ваш перший приклад - як ви повинні налаштувати директиву для VirtualHosts, і застосував параметри в рамках директиви лише до DocumentRoot. Ваш другий приклад - це посилання на корінь файлової системи (буквально /).

Ви не розмістили решти директиви, але це, як правило, використовується як спосіб намагатися ув’язнити Apache та обмежити його доступ, і зазвичай (але не завжди) розміщується всередині основних apache2.confабо httpd.confконфігураційних файлів, при цьому ваш VirtualHosts явно дозволяє доступ до власних DocumentRootкаталогів, тому обидва вони часто використовуються разом.

З документації Apache :

Зверніть увагу, що доступ за замовчуванням для <Каталог /> повинен дозволяти весь доступ. Це означає, що Apache httpd буде обслуговувати будь-який файл, відображений з URL-адреси. Рекомендується змінити це за допомогою блоку, наприклад:
    <Каталог />
      Вимагати всіх відмовлено
    </Directory>
а потім замініть це для каталогів, які ви хочете отримати доступними. Докладнішу інформацію див. На сторінці Поради щодо безпеки .

Якщо другий приклад буквально стосується файлової системи /, то чому Apache обслуговує /var/wwwкаталог?
Джефф

1
Apache буде служити DocumentRoot. DirectoryДиректива повністю окремо, і має ефект кажучи «застосувати закриту конфігурацію в цей каталог і все підкаталоги». Більш конкретні конфігурації мають пріоритет, тому <Directory /var/www/>буде переосмислено <Directory />.
Крейг Уотсон

Я бачу. Отже, <Directory />з контексту VirtualHost можна змінити Параметри (або інші налаштування) для всіх серверів <Directory />? Що має сенс. Дякую за допомогу.
Джефф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.