Простое управление виртуальными хостами apache с помощью mod_macro

()

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

На этом всё, приятной работы!

Ключевые слова: apache, apache2, mod_macro, виртуальный хост.

Комментарии:

Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE