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>

Описание: Определяет макрос файла конфигурации
Синтаксис:
<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