Если ваш веб-сервер обслуживает большое количество виртуальных хостов то вы наверняка задумывались об автоматизации управления конфигурацией сервера. Если используется веб-сервер 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 каждую минуту и тогда вообще работа с хостами сведётся к добавлению/удалению директорий.
На этом всё, приятной работы!
