mod_macro. Макроподстановки в httpd.conf
В работе администраторов серверов помимо множества интереснейших занятий
присутствует некоторая рутина. Одним из таких рутинных занятий является поддержка конфигурации сервера в актуальном состоянии. А именно в той ее части, которая ответственна за работу виртуальных хостов. Особенно это актуально для администраторов хостинговых компаний, у которых количество таких хостов превышает несколько сотен.
![:)](/wp-images/smilies/icon_smile.gif)
Однако есть один замечательный модуль, который данное положение дел может кардинально изменить - это модуль 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 */
};
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 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_macro приводит следующие выгоды от использования это модуля:
- Уменьшение размера конфигурации
- Уменьшение возможности ошибок при copy-paste
- Более легкое восприятие конфигурации
Скачать mod_macro
Текущая версия mod_macro для Apache 2.2 - 1.1.8. Для Apache 2.0 надо использовать версию 1.1.6. А для Apache 1.3 - версию 1.1.2.
Установка mod_macro
Чтобы установить mod_macro, необходимо распаковать архив с модулем и выполнить всего одну команду:
prompt> apxs -cia mod_macro-1.1.*/mod_macro.c
Про использование утилиты Apxs можно прочитать в статье "APXS - инструмент для сборки модулей Apache", а для пользователей Windows рекомендую обратить внимание на порт Apxs для win32, про который я писал в последнем выпуске рассылки "Информационный бюллетень от ApacheDev.ru".
Может подкинет кто ссылку.
А вообще модуль просто супер. На сервере ококло 500 хостов, и на каждый по строчке всего.
Еще надо добавить к статье, что изнутри одного макроса можно вызывать другой макрос.
Комментарий от Alexey A. Ukhov — Сентябрь 27, 2006 @ 5:40 am
Текст: Однако есть один замечательный модуль, который данное положение дел может кардинально изменить - это модуль mod_macro.
Далее баннер:
уНЯРХМЦ НР AGAVA.ru - оКЮМ Normal
* нАЗЕЛ ЯЮИРЮ: 1цА
* рПЮТХЙ: МЕНЦПЮМХВЕММШИ
* дНЛЕМ 2 СПНБМЪ: АЕЯОКЮРМН
* оНДДЕПФЙЮ CGI, PHP, Perl, SSI
* аЮГ ДЮММШУ MySQL: 5
* йНКХВЕЯРБН e-mail: МЕНЦПЮМХВЕММН
Интересно выглядит…
Комментарий от wilfre — Сентябрь 27, 2006 @ 1:50 pm
Комментарий от Администратор — Сентябрь 27, 2006 @ 1:55 pm
Спрашивал у своего bfilter’а - говорит, шо ниче не видел
Комментарий от Nick — Сентябрь 27, 2006 @ 1:58 pm
Комментарий от wilfre — Сентябрь 27, 2006 @ 5:03 pm
Комментарий от inform — Август 13, 2007 @ 1:30 am
_______________________
http://evm-history.org/
Комментарий от андрюха — Сентябрь 4, 2008 @ 7:26 pm
____________
http://www.subarucar.ru/
Комментарий от Dimon — Сентябрь 27, 2008 @ 11:24 am
________
http://haveforex.ru/
Комментарий от САНЧОС — Сентябрь 27, 2008 @ 6:17 pm
________
http://windowscity.ru/
Комментарий от чудик — Сентябрь 27, 2008 @ 6:19 pm
Комментарий от Кирилл — Ноябрь 7, 2008 @ 10:50 pm
Комментарий от kazyla — Ноябрь 20, 2008 @ 12:21 pm
Комментарий от Roma — Декабрь 11, 2008 @ 11:01 pm
Может подкинет кто ссылку.
Комментарий от flake — Декабрь 16, 2008 @ 6:36 pm
Комментарий от Sergey — Февраль 14, 2009 @ 2:50 am
Комментарий от Аркадий Вранский — Март 14, 2009 @ 5:51 pm
Комментарий от Александр Сергеевич — Март 15, 2009 @ 10:26 pm
Комментарий от Виолетта — Март 31, 2009 @ 9:43 pm
Текст: Однако есть один замечательный модуль, который данное положение дел может кардинально изменить - это модуль mod_macro.
Комментарий от Нина — Март 31, 2009 @ 9:44 pm
Может подкинет кто ссылку.
Комментарий от Рудольф — Март 31, 2009 @ 9:45 pm
Комментарий от Василий — Апрель 15, 2009 @ 5:15 pm