Если я установлю параметр конфигурации в httpd.conf
который не используется снова в любом из наших vhosts, будет ли это действовать для каждого из vhosts или для каждого из них нужно будет установить параметры?
В частности, я хочу установить RewriteLog
и RewriteLogLevel
параметры. К сожалению, у нас гораздо больше конфигураций виртуальных хостов, чем это разумно, поэтому установка этой опции в каждом файле и проверка будут затруднительны во время его развертывания (не заставляйте меня начинать с управления конфигурациями). Итак, если я установлю его httpd.conf
и убедитесь, что его нет ни в одной из конфигураций vhost, будет ли он применяться к каждому vhost?
Согласно документации Apache, разделы конфигурации объединяются в следующем порядке:
<Directory>
(кроме регулярных выражений) и .htaccess выполняются одновременно (с .htaccess, если разрешено, переопределение <Directory>
) <DirectoryMatch>
(и <Directory "~">
)<Files>
и <FilesMatch>
сделано одновременно<Location>
и <LocationMatch>
сделано одновременно<If>
Некоторые важные замечания:
- Помимо
<Directory>
, внутри каждой группы разделы обрабатываются в том порядке, в котором они указаны в файлах конфигурации. Например, запрос / foo будет соответствовать<Location "/foo/bar">
и<Location "/foo">
(в данном случае группа 4): будут оцениваться оба раздела, но в том порядке, в котором они указаны в файлах конфигурации.<Directory>
(группа 1 выше) обрабатывается в порядке от самого короткого компонента каталога к самому длинному. Например,<Directory "/var/web/dir">
будет обработано до<Directory "/var/web/dir/subdir">
.- Если несколько
<Directory>
разделы применяются к тому же каталогу, в котором они обрабатываются в порядке файла конфигурации.- Конфигурации, включенные с помощью директивы Include, будут обрабатываться так, как если бы они находились во включающем файле в месте расположения директивы Include.
- Разделы внутри
<VirtualHost>
разделы применяются после соответствующих разделов вне определения виртуального хоста. Это позволяет виртуальным хостам переопределять конфигурацию основного сервера.- Когда запрос обслуживается mod_proxy, контейнер занимает место
<Directory>
контейнер в порядке обработки.
Например, следующее будет применяться в порядке A> B> C> D> E:
<Location "/">
E
</Location>
<Files "f.html">
D
</Files>
<VirtualHost *>
<Directory "/a/b">
B
</Directory>
</VirtualHost>
<DirectoryMatch "^.*b$">
C
</DirectoryMatch>
<Directory "/a/b">
A
</Directory>
Более подробную информацию можно найти в документации: https://httpd.apache.org/docs/2.4/sections.html
Директивы вроде <Directory>
, <DirectoryMatch>
, <Files>
, <FilesMatch>
, <Location>
, <LocationMatch>
, и <VirtualHost>
просто ограничьте объем включаемых в них директив, поэтому применяя <IfModule>
директива к глобальной области файла применит его глобально.
Если вы пытаетесь переопределить mod_rewrite
, вы можете рассмотреть возможность использования RewriteOptions
директива установлена на InheritDown
. Это приведет к тому, что все дочерние конфигурации унаследуют настройки из родительской области, что эквивалентно помещению RewriteOptions Inherit
в каждой дочерней области.
<IfModule mod_rewrite.c>
RewriteOptions InheritDown
RewriteLog [some setting here]
RewriteLogLevel [somesettinghere]
</IfModule>
Размещение этого глобально применит ваши параметры ведения журнала к каждой дочерней области.