Назад | Перейти на главную страницу

Каталог внутри или вне VirtualHosts?

Есть ли разница между размещением тегов каталога внутри или вне VirtualHosts? Я нашел файл конфигурации, в котором есть несколько VirtualHosts с одним и тем же тегом Directory внутри и одинаковым снаружи; поэтому я думаю об избавлении от этого дублирования, но не совсем понимаю его семантику.

<Directory> внутри <VirtualHost> будет применяться только к файлам в этом каталоге, когда к ним осуществляется доступ через этот VHost. <Directory> вне <VirtualHost> всегда будет применяться (если, конечно, не переопределено в <VirtualHost> или где-либо еще).

С точки зрения безопасности можно спорить обе стороны: дополнительные уровни доступа (AllowOverride all, например), вероятно, разумнее настроить внутри <VirtualHost>, поскольку непредвиденное взаимодействие между сценариями на другом VHost может позволить вам запустить XSS-атаку. Ограничения доступа (Deny from all, Allow from 127.0.0.1) имеет больше смысла за пределами <VirtualHost>, если есть бэкдор через что-то вроде псевдонима верхнего уровня или ScriptAlias. И тогда вы попадаете в действительно сложные возможности: где же AllowOverride all который обеспечивает ограничение доступа в .htaccess go, поскольку у кого-то может быть VHost, у которого механизм сценариев отключен по соображениям производительности или безопасности, но который затем предоставляет файл с конфиденциальной информацией, обычно защищенной .htaccess?

В конце концов, место размещения <Directory> оказывается комбинацией трех вещей в порядке возрастания важности:

  1. Политика - если компания всегда помещает <Directory> в <VirtualHost>, почти наверняка неправильно раскачивать лодку.
  2. Разборчивость - если у вас шестьсот виртуальных хостов, для которых нужна одна и та же строфа <Directory>, вероятно, стоит отказаться от политики.
  3. Безопасность. Если тот или иной подход дает явное преимущество в плане безопасности, то это де-факто к черту правильный выбор, политика и удобочитаемость (хотя вам следует задокументировать, почему и как вы нарушили политику, и принять меры, такие как использование Include для максимальной разборчивости).