mod_macro. Макроподстановки в httpd.conf


В работе администраторов серверов помимо множества интереснейших занятий :) присутствует некоторая рутина. Одним из таких рутинных занятий является поддержка конфигурации сервера в актуальном состоянии. А именно в той ее части, которая ответственна за работу виртуальных хостов. Особенно это актуально для администраторов хостинговых компаний, у которых количество таких хостов превышает несколько сотен.
Однако есть один замечательный модуль, который данное положение дел может кардинально изменить - это модуль 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

Текущая версия 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".

These icons link to social bookmarking sites where readers can share and discover new web pages.
  • News2.ru
  • NewsLand.ru
  • del.icio.us
  • BobrDobr.ru
  • Ma.gnolia
  • Digg
  • Reddit
  • Technorati
  • Slashdot
  • Netscape
  • DZone
  • ThisNext
  • Furl
  • YahooMyWeb
Опубликовано в: Модули Apache Сентябрь 27, 2006

21 Комментариев »

  1. Я долго и безуспешно пытался найти откомпиленую версию mod_macro для Apache 2.0 на win32 платформе.
    Может подкинет кто ссылку.
    А вообще модуль просто супер. На сервере ококло 500 хостов, и на каждый по строчке всего.
    Еще надо добавить к статье, что изнутри одного макроса можно вызывать другой макрос.

    Комментарий от Alexey A. Ukhov — Сентябрь 27, 2006 @ 5:40 am

  2. Оффтоп, но! Странно видеть на сайте, посвященном web такое:
    Текст: Однако есть один замечательный модуль, который данное положение дел может кардинально изменить - это модуль mod_macro.
    Далее баннер:
    уНЯРХМЦ НР AGAVA.ru - оКЮМ Normal
    * нАЗЕЛ ЯЮИРЮ: 1цА
    * рПЮТХЙ: МЕНЦПЮМХВЕММШИ
    * дНЛЕМ 2 СПНБМЪ: АЕЯОКЮРМН
    * оНДДЕПФЙЮ CGI, PHP, Perl, SSI
    * аЮГ ДЮММШУ MySQL: 5
    * йНКХВЕЯРБН e-mail: МЕНЦПЮМХВЕММН
    Интересно выглядит…

    Комментарий от wilfre — Сентябрь 27, 2006 @ 1:50 pm

  3. Спасибо wilfre. Исправлю. Просто у меня все отображается нормально, поэтому и не досмотрел.

    Комментарий от Администратор — Сентябрь 27, 2006 @ 1:55 pm

  4. Баннер? Какой баннер?
    Спрашивал у своего bfilter’а - говорит, шо ниче не видел :)

    Комментарий от Nick — Сентябрь 27, 2006 @ 1:58 pm

  5. 2Администратор: а Вы просто возьмите за правило: ни один фрейм (даже если монофрейм) не выпускать в свет без META-тегов, тыкающих браузеры носом в чарсет :)

    Комментарий от wilfre — Сентябрь 27, 2006 @ 5:03 pm

  6. Пожалуйста подскажите как скомпилировать этот модуль для apache 1.3 под win32. Буду рад готовому!

    Комментарий от inform — Август 13, 2007 @ 1:30 am

  7. КЛАСС!!! ОЧЕНЬ Пригодилась!!! Супер! Респект автору!!!
    _______________________
    http://evm-history.org/

    Комментарий от андрюха — Сентябрь 4, 2008 @ 7:26 pm

  8. Да ! Класс! спасибо! мне оч было нада! респект!
    ____________
    http://www.subarucar.ru/

    Комментарий от Dimon — Сентябрь 27, 2008 @ 11:24 am

  9. Супер! мне оч понравилась статья! БОЛЬШОЕ СПАСИБО!
    ________
    http://haveforex.ru/

    Комментарий от САНЧОС — Сентябрь 27, 2008 @ 6:17 pm

  10. Статейка так себе! но все равно спасибо!
    ________
    http://windowscity.ru/

    Комментарий от чудик — Сентябрь 27, 2008 @ 6:19 pm

  11. всё получилось, благодарю

    Комментарий от Кирилл — Ноябрь 7, 2008 @ 10:50 pm

  12. не очень статья, но тему раскрывает

    Комментарий от kazyla — Ноябрь 20, 2008 @ 12:21 pm

  13. Хорошая вещь она мне понадобилась.

    Комментарий от Roma — Декабрь 11, 2008 @ 11:01 pm

  14. Я долго и безуспешно пытался найти откомпиленую версию mod_macro для Apache 2.0 на win32 платформе.
    Может подкинет кто ссылку.

    Комментарий от flake — Декабрь 16, 2008 @ 6:36 pm

  15. Спасибо за статью!

    Комментарий от Sergey — Февраль 14, 2009 @ 2:50 am

  16. А может ли директива Use подставлять макрос и при этом передавать ему конкретные аргументы?

    Комментарий от Аркадий Вранский — Март 14, 2009 @ 5:51 pm

  17. Работа функционала mod_macro проста: модуль считывает макроподстановки, преобразует их в нормальные директивы и сохраняет их в соответствующих серверных структурах. А в каких именно контекстах используются директивы mod_macro?

    Комментарий от Александр Сергеевич — Март 15, 2009 @ 10:26 pm

  18. Пожалуйста подскажите как скомпилировать этот модуль для apache 1.3 под win32. Буду рад готовому!

    Комментарий от Виолетта — Март 31, 2009 @ 9:43 pm

  19. Странно видеть на сайте, посвященном web такое:
    Текст: Однако есть один замечательный модуль, который данное положение дел может кардинально изменить - это модуль mod_macro.

    Комментарий от Нина — Март 31, 2009 @ 9:44 pm

  20. Я долго и безуспешно пытался найти откомпиленую версию mod_macro для Apache 2.0 на win32 платформе.
    Может подкинет кто ссылку.

    Комментарий от Рудольф — Март 31, 2009 @ 9:45 pm

  21. А что представляет собой директива Use и можно ли ей передавать конкретный аргумент?

    Комментарий от Василий — Апрель 15, 2009 @ 5:15 pm

Оставить комментарий

You must be logged in to post a comment.

Работает на WordPress