Модуль Apache mod_macro
| Описание: | Предоставляет макросы в файлах конфигурации Apache httpd во время выполнения |
|---|---|
| Статус: | Базовый |
| Идентификатор модуля: | macro_module |
| Файл исходного кода: | mod_macro.c |
| Совместимость: | Доступен в httpd 2.4.5 и более поздних версиях |
Краткое описание
Предоставляет макросы в файлах конфигурации Apache httpd во время выполнения, чтобы упростить создание множества похожих блоков конфигурации. При запуске сервера макросы расширяются с использованием предоставленных параметров, а результат обрабатывается вместе с остальной частью файла конфигурации.
Использование
Макросы определяются с помощью блоков <Macro>, которые содержат часть вашей конфигурации, которая должна повторяться, с переменными для тех частей, которые необходимо заменить.
Например, вы можете использовать макрос для определения блока <VirtualHost>, чтобы определить несколько похожих виртуальных хостов:
<Macro VHost $name $domain>
<VirtualHost *:80>
ServerName $domain
ServerAlias www.$domain
DocumentRoot "/var/www/vhosts/$name"
ErrorLog "/var/log/httpd/$name.error_log"
CustomLog "/var/log/httpd/$name.access_log" combined
</VirtualHost>
</Macro> Имена макросов нечувствительны к регистру, как и директивы конфигурации httpd. Однако имена переменных чувствительны к регистру.
Затем вы можете несколько раз вызвать этот макрос для создания виртуальных хостов:
Use VHost example example.com Use VHost myhost hostname.org Use VHost apache apache.org UndefMacro VHost
Во время запуска сервера каждое из этих Use вызовов будет расширено до полного виртуального хоста, как описано в определении <Macro>.
Директива UndefMacro используется для того, чтобы последующие макросы, использующие те же имена переменных, не приводили к конфликтам определений.
Более подробный пример можно увидеть в разделе Примеры.
Рекомендации
Имена параметров должны начинаться с символа, такого как $, %, или @, чтобы их легко было идентифицировать, а также для облегчения взаимодействия с другими директивами, такими как ядро Define директивы. Отсутствие этого приведёт к предупреждению. Тем не менее, вам рекомендуется хорошо знать всю конфигурацию сервера, чтобы избежать повторного использования одних и тех же переменных в разных областях видимости, что может привести к путанице.
Параметры, начинающиеся с $ или %, не экранируются. Параметры, начинающиеся с @, экранируются в кавычках.
Избегайте использования параметра, содержащего другой параметр в качестве префикса (например, $win и $winter), так как это может вызвать путаницу во время оценки выражения. В случае такой путаницы используется самое длинное возможное имя параметра.
Если вы хотите использовать значение внутри другой строки, полезно заключить параметр в фигурные скобки, чтобы избежать путаницы:
<Macro DocRoot ${docroot}>
DocumentRoot "/var/www/${docroot}/htdocs"
</Macro> Примеры
Определение виртуального хоста
Частое использование mod_macro - это создание динамически сгенерированных виртуальных хостов.
## Define a VHost Macro for repetitive configurations
<Macro VHost $host $port $dir>
Listen $port
<VirtualHost *:$port>
ServerName $host
DocumentRoot "$dir"
# Public document root
<Directory "$dir">
Require all granted
</Directory>
# limit access to intranet subdir.
<Directory "$dir/intranet">
Require ip 10.0.0.0/8
</Directory>
</VirtualHost>
</Macro>
## Use of VHost with different arguments.
Use VHost www.apache.org 80 /vhosts/apache/htdocs
Use VHost example.org 8080 /vhosts/example/htdocs
Use VHost www.example.fr 1234 /vhosts/example.fr/htdocs Удаление определения макроса
Рекомендуется удалять определение макроса после его использования. Это предотвращает путаницу в сложном файле конфигурации, где могут возникать конфликты имён переменных.
<Macro DirGroup $dir $group>
<Directory "$dir">
Require group $group
</Directory>
</Macro>
Use DirGroup /www/apache/private private
Use DirGroup /www/apache/server admin
UndefMacro DirGroup <Макрос> Директива
| Описание: | Определение макроса файла конфигурации |
|---|---|
| Синтаксис: | <Macro name [par1 .. parN]> ... </Macro> |
| Контекст: | конфигурация сервера, виртуальный хост, директория |
| Статус: | Базовый |
| Модуль: | mod_macro |
Директива <Macro> управляет определением макроса в файлах конфигурации сервера во время выполнения. Первый аргумент - имя макроса. Другие аргументы - параметры макроса. Хорошей практикой является добавление префикса к именам параметров $%@, а не к именам макросов.
<Macro LocalAccessPolicy>
Require ip 10.2.16.0/24
</Macro>
<Macro RestrictedAccessPolicy $ipnumbers>
Require ip $ipnumbers
</Macro> Директива UndefMacro
| Описание: | Удалить определение макроса |
|---|---|
| Синтаксис: | UndefMacro name |
| Контекст: | конфигурация сервера, виртуальный хост, директория |
| Статус: | Базовый |
| Модуль: | mod_macro |
Директива UndefMacro удаляет определение макроса, которое было определено ранее.
UndefMacro LocalAccessPolicy UndefMacro RestrictedAccessPolicy
Директива Use
| Описание: | Использование макроса |
|---|---|
| Синтаксис: | Use name [value1 ... valueN] |
| Контекст: | конфигурация сервера, виртуальный хост, директория |
| Статус: | Базовый |
| Модуль: | mod_macro |
Директива Use управляет использованием макроса. Указанный макрос расширяется. Ему необходимо передать такое же количество аргументов, как и при определении макроса. Предоставленные значения связываются с соответствующими начальными параметрами и подставляются перед обработкой.
Use LocalAccessPolicy ... Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"
эквивалентно, с определенными выше макросами, следующему:
Require ip 10.2.16.0/24 ... Require ip 192.54.172.0/24 192.54.148.0/24
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_macro.html