Spec-Zone.ru › Apache HTTP Server

Модуль 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API