mod_macro: макроподстановки в конфиге Apache

В работе администраторов серверов помимо множества интереснейших занятий присутствует некоторая рутина. Одним из таких рутинных занятий является поддержка конфигурации сервера в актуальном состоянии. А именно в той ее части, которая ответственна за работу виртуальных хостов. Особенно это актуально для администраторов хостинговых компаний, у которых количество таких хостов превышает несколько сотен.

Однако есть один замечательный модуль, который данное положение дел может кардинально изменить - это модуль mod_macro.

А предназначен этот модуль, как не сложно догадаться из его названия, для обработки макроподстановок в конфигурационных файлах сервера Apache. Причем функционирует этот модуль очень интересно!

Если взглянуть на исходный код модуля, то видно, что у него полностью отсутствуют обработчики каких-либо хуков Apache. Вот, как выглядит его главная структура:

AP_DECLARE_DATA module macro_module = {
STANDARD20_MODULE_STUFF,
NULL, /* create per-directory config */
NULL, /* merge per-directory config structures */
NULL, /* create per-server config structure */
NULL, /* merge per-server config structures */
macro_cmds, /* command table */
NULL /* register hooks */
};


Как вы видите, все поля, кроме массива описателей директив, равны NULL.

А дело в том, что весь функционал mod_macro содержится только в обработчиках собственных директив. Логика его работы проста: модуль считывает макроподстановки, преобразует их в нормальные директивы и сохраняет их в соответствующих серверных структурах. И все это делается на этапе чтения директив, таким образом влияние на производительность сервера исключается.

работа с mod_macro

Теперь давайте посмотрим, насколько же упрощает mod_macro работу администратора. Легче всего это понять, взглянув на примеры. Вот пример настройки нескольких виртуальных хостов:

# Определение макроса VHost.
<Macro VHost $host $port $dir>
Listen $port
<VirtualHost $host:$port>
DocumentRoot $dir
<Directory $dir>

# Настройки каталога

</Directory>

# Настройки подкаталога intranet

<Directory $dir/intranet>
order deny,allow
deny from all
allow from 10.0.0.0/8
</Directory>

</VirtualHost>

</Macro>


А вот примеры использование макроса VHost с разными аргументами:

Use VHost www.apache.org 80 /projects/apache/web
Use VHost www.perl.com 8080 /projects/perl/web
Use VHost www.ensmp.fr 1234 /projects/mines/web


Немного объясню. Директива <Macro …> определяет именованный макрос, где первым параметром является имя макроса, а остальные - аргументы макроса (начинаются с символа $), которые затем подставляются в соответствующие места макроса.

А директива Use подставляет определенный макрос, передавая ему конкретные аргументы. Так, например, Use VHost www.apache.org 80
/projects/apache/web создает виртуальный хост www.apache.org:80 с корневым каталогом /projects/apache/web.

Директивы mod_macro используются только в следующих контекстах: server config, virtual host, directory.

Вот тут можно посмотреть примеры использования настройка mod_perl с помощью mod_macro.

Автор mod_macro приводит следующие выгоды от использования это модуля:

- уменьшение размера конфигурации;
- уменьшение возможности ошибок при copy-paste;
- более легкое восприятие конфигурации.

установка mod_macro

Сайт проекта - http://www.cri.ensmp.fr/~coelho/mod_macro/. Оттуда можно скачать архив с модулем. Чтобы установить mod_macro, необходимо распаковать архив и выполнить всего одну команду:

prompt> apxs -cia mod_macro-1.1.*/mod_macro.c



Максим Сипягин, ApacheDev.ru


Сетевые решения. Статья была опубликована в номере 09 за 2006 год в рубрике sysadmin

©1999-2024 Сетевые решения