Если ваш веб-сервер обслуживает большое количество виртуальных хостов то вы наверняка задумывались об автоматизации управления конфигурацией сервера. Если используется веб-сервер apache то большую помощь может оказать модуль mod_macro.
Модуль mod_macro предназначен для макроподстановок в конфигурации веб-сервера apache. Далее будет показано как можно использовать этот модуль для простого управления виртуальными хостами.
Допустим что у нас уже есть настроенный веб-сервер apache2, запущенный на Debian Squeeze, добавим к нему модуль mod_macro:
apt-get install libapache2-mod-macro
Включим его:
a2enmod macro && invoke-rc.d apache2 reload
Теперь определимся с условиями размещения хостов и их логов: DocumentRoot для каждого хоста будет иметь вид: "/var/www/domains/<имя_домена>". Файлы логов будут у каждого хоста будут свои и они будут размещаться в стандартной директории "/var/log/apache2".
Опишем шаблон виртуального хоста в файле "/etc/apache2/conf.d/macro_vhost.conf":
<Macro vhost $host> <VirtualHost *:80> ServerAdmin webmaster@$host ServerName $host ServerAlias www.$host DocumentRoot /var/www/domains/$host <Directory /var/www/domains/$host> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/$host-error.log LogLevel warn CustomLog /var/log/apache2/$host-access.log combined </VirtualHost> </Macro>
Описывать виртуальные хосты будем в файле "/etc/apache2/conf.d/macro_vhost_hosts.conf" примерно так:
Use vhost somehost.com
Для ещё большего упрощения работы с виртуальными хостами создадим скрипт "regen_apache_macro_vhost_cfg.sh":
#!/bin/sh # Путь к файлу конфигурации CFGFILE="/etc/apache2/conf.d/macro_vhost_hosts.conf" { # Сканируем директорию с виртуальными хостами for host in `ls /var/www/domains/`; do # Добавляем виртуальный хост в список echo "Use vhost ${host}"; done } > ${CFGFILE} # Перезапускаем web-сервер invoke-rc.d apache2 reload
Теперь для создания нового виртуального хоста достаточно создать директорию по имени домена в каталоге "/var/www/domains/" и выполнить этот скрипт. Для удаления виртуального хоста нужно удалить директорию с данными хоста и так же выполнить этот скрипт.
Желающие могут модифицировать скрипт таким образом, чтобы он перед генерацией конфигурации проверял не изменился ли листинг директории и менял конфигурацию только в случае добавления/удаления новых директорий. Такой скрипт можно будет запускать по cron каждую минуту и тогда вообще работа с хостами сведётся к добавлению/удалению директорий.
На этом всё, приятной работы!