понедельник, 14 апреля 2008 г.

Массовый хостинг с помощью mod_vhost_alias

Автор: Голышев С.В. (glsv)
e-mail: glsv@yandex.ru

В статье описывается работа с модулем Apache mod_vhost_alias. Данный модуль предназначен для уменьшения трудоемкости создания и поддержки большого количества виртуальных хостов на сервере Apache. Модуль организует динамическое создание виртуальных хостов на основе запрошенного доменного имени и не требует внесения изменений в конфигурационные файлы сервера при создании новых виртуальных хостов.

При большом числе виртуальных хостов (десятки и сотни) время запуска и перезагрузки веб-сервера занимает значительное время, в течение которого он недоступен посетителям. Такая ситуация является критической для хост-провайдеров и серверов на которых расположены популярные сайты. Уменьшить время запуска сервера и упростить работу c большим количеством виртуальных хостов может модуль Apache с названием mod_vhost_alias.

Данный модуль позволяет не создавать отдельный контейнер для каждого виртуального хоста, а динамически формирует пути к директориям сайтов на основе запрошенных доменных имен или IP-адресов. Для создания сотен виртуальных хостов модуль mod_vhost_alias использует всего 4 директивы, с помощью которых определяются правила формирования путей к директориям сайтов. 2 из них предназначены для работы с виртуальными хостами на основе имен и 2 для работы с виртуальными хостами на основе IP-адресов.

  • VirtualDocumentRoot – определение директории DocumentRoot на основе запрошенного доменного имени.
  • VirtualScriptAlias - определение директории для CGI-скриптов на основе запрошенного доменного имени.
  • VirtualDocumentRootIP– определение директории DocumentRoot на основе запрошенного IP-адреса.
  • VirtualScriptAliasIP- определение директории для CGI-скриптов на основе запрошенного IP-адреса.

В директивах модуля могут использоваться следующие параметры:

  • %% - символ %
  • %p – номер запрошенного порта
  • %N.M – имя хоста или часть имени, определяемая значениями N и M.

Параметр N определяет часть имени хоста, которое следует использовать. Параметр M определяет номер используемого символа из части N. Ниже показаны возможные значения параметра N и примеры на основе доменного имени www.st-host.ru.

Разбиение имен хостов на части происходит по символу точки слева направо. Т.е. для имени www.st-host.ru первой частью будет являться - www, а последней - ru.

%N Описание Пример
0% Полное имя www.st-host.ru
1% Первая часть имени www
2% Вторая часть имени st-host
3% Третья часть имени ru
-1% Последняя часть ru
-2% Предпоследняя часть st-host
%2+ Вторая и все поcледующие части st-host.ru
%-2+ Предпоследняя и все последующие части st-host.ru

Рассмотрим применение данных параметров на примере директивы VirtualDocumentRoot.

VirtualDocumentRoot /www/%-2/htdocs

При запросе по адресу http://www.st-host.ru директива VirtualDocumentRoot сгенерирует путь к файлу на основе запрошенного имени хоста и Apache будет искать файл на диске по адресу /www/st-host/htdocs/index.php

Параметр M определяет номер используемого символа в параметре N. При положительном значении M отсчитывается с левой стороны строки, при отрицательном – с правой стороны.

%N.M Пример
%0.1 w
%2.1 s
%2.2 t
%-2.1 s
%-2.-1 t

Ниже приведены примеры директивы VirtualDocumentRoot и сгенерированные пути для запроса http://www.st-host.ru/.

/www/%0/htdocs Путь: /www/www.st-host.ru/htdocs
/www/%-1/%-2/htdocs Путь: /www/ru/st-host/htdocs
/www/%-1/%-2.1/%-2/htdocs Путь: /www/ru/s/st-host/htdocs
/www/%-1/%-2.1/%-2.1%-2.2/%-2/htdocs Путь: /www/ru/s/st/st-host/htdocs

Если на сервере используется большое количество виртуальных хостов, то директории хранения сайтов удобно распределять по именам доменов первого уровня (ru, com, net, org и т.п.). При размещении нескольких сотен сайтов их можно распределять по папкам, имена которых соответствуют первым символам доменных имен.

Недостатки модуля mod_vhost_alias

Удобный способ создания виртуальных хостов с помощью модуля mod_vhost_alias не лишен ряда недостатков.

  • Нельзя разделить логи сервера по виртуальных хостам – все обращения к разным сайтам записываются в общий журнальный файл.
  • Для эффективного использования модуля mod_vhost_alias конфигурация всех виртуальных хостов должно быть одинакова. В противном случае, для настройки каждого виртуального хоста необходимо применять контейнер , что лишает модуль mod_vhost_alias своего основного преимущества.

Индивидуальная настройка виртуальных хостов, созданных mod_vhost_alias

Модуль mod_vhost_alias не имеет средств индивидуальной настройки виртуальных хостов и вследствие этого конфигурации всех виртуальных хостов, созданных модулем, получаются одинаковыми. При необходимости индивидуального конфигурирования виртуальных хостов применяется контейнер , в котором производится настройка работы Apache индивидуально для каждой директории.

Рассмотрим пример. Необходимо произвести уникальную настройку сайта www.mega-site.ru. При этом для создания виртуальных хостов используется модуль mod_vhost_alias со следующими директивами.

VirtualDocumentRoot /www/%-1/%-2/htdocs

Согласно директиве VirtualDocumentRoot файлы сайта www.mega-site.ru должны храниться в директории /www/ru/mega-site/htdocs. Для того чтобы настроить работу Apache для этой директории необходимо в файле httpd.conf создать следующие директивы.


# Директивы конфигурирования
# уникальные для сайта www.mega-site.ru

Внутри контейнера необходимо разместить директивы, которые необходимо применить к конкретному сайту (виртуальному хосту).

Примечание

Частичное конфигурирование виртуальных хостов можно производить также через файлы .htaccess, размещаемые непосредственно в директории сайта.

Русская версия English

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