Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_vhost_alias

Описание: Обеспечивает динамически настраиваемый массовый виртуальный хостинг
Статус: Расширение
Идентификатор модуля: vhost_alias_module
Исходный файл: mod_vhost_alias.c

Краткое описание

Этот модуль создаёт динамически настраиваемые виртуальные хосты, позволяя использовать IP-адрес и/или заголовок Host: HTTP-запроса как часть пути для определения файлов, которые следует предоставлять. Это позволяет легко использовать огромное количество виртуальных хостов с похожими конфигурациями.

Примечание

Если для преобразования URI в имена файлов используются mod_alias или mod_userdir, они переопределят описанные ниже директивы mod_vhost_alias. Например, следующая конфигурация во всех случаях сопоставит /cgi-bin/script.pl с /usr/local/apache2/cgi-bin/script.pl:

ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"
VirtualScriptAlias "/never/found/%0/cgi-bin/"

Подстановка в имена каталогов

Все директивы этого модуля подставляют строку в путь. Подставляемая строка (далее — «имя») может быть именем сервера (подробные сведения о том, как оно определяется, см. в директиве UseCanonicalName) или IP-адресом виртуального хоста на сервере в формате с точками. Подстановка выполняется с помощью спецификаторов, вдохновлённых printf, которые имеют несколько форматов:

%% вставляет %
%p вставляет номер порта виртуального хоста
%N.M вставляет имя целиком или его часть

N и M используются для указания подстрок имени. N выбирает компоненты имени, разделённые точками, а M выбирает символы внутри той части, которую выбрал N. M необязателен и по умолчанию равен нулю, если не указан; точка должна присутствовать тогда и только тогда, когда присутствует M. Значения интерпретируются следующим образом:

0 всё имя
1 первая часть
2 вторая часть
-1 последняя часть
-2 предпоследняя часть
2+ вторая и все последующие части
-2+ предпоследняя и все предшествующие части
1+ и -1+ то же, что и 0

Если значение N или M превышает количество доступных частей, подставляется одиночное подчёркивание.

Примеры

Для простых виртуальных хостов, основанных на имени, в файле конфигурации сервера можно использовать следующие директивы:

UseCanonicalName    Off
VirtualDocumentRoot "/usr/local/apache/vhosts/%0"

Запрос http://www.example.com/directory/file.html будет обработан с использованием файла /usr/local/apache/vhosts/www.example.com/directory/file.html.

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

UseCanonicalName    Off
VirtualDocumentRoot "/usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2"

Запрос http://www.domain.example.com/directory/file.html будет обработан с использованием файла /usr/local/apache/vhosts/example.com/d/o/m/domain/directory/file.html.

Более равномерного распределения файлов можно добиться, выполняя хеширование имени с конца, например:

VirtualDocumentRoot "/usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2"

Примерный запрос поступил бы с /usr/local/apache/vhosts/example.com/n/i/a/domain/directory/file.html.

В качестве альтернативы можно использовать:

VirtualDocumentRoot "/usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2.4+"

Примерный запрос поступил бы с /usr/local/apache/vhosts/example.com/d/o/m/ain/directory/file.html.

Пользователи часто хотят направлять несколько доменов в несколько корневых каталогов документов, не беспокоясь о длине имени хоста или количестве его частей. Если запрошенное имя хоста — sub.www.domain.example.com, а не просто www.domain.example.com, то использование %3+ приведёт к тому, что корневым каталогом документов станет /usr/local/apache/vhosts/domain.example.com/... вместо предполагаемого каталога example.com. В таких случаях может быть полезно сочетание %-2.0.%-1.0, которое всегда возвращает доменное имя и домен верхнего уровня, например example.com, независимо от количества поддоменов, добавленных к имени хоста. Таким образом можно создать конфигурацию, которая будет направлять все поддомены первого, второго или третьего уровня в один и тот же каталог:

VirtualDocumentRoot "/usr/local/apache/vhosts/%-2.0.%-1.0"

В приведённом выше примере и www.example.com, и www.sub.example.com, и example.com будут указывать на /usr/local/apache/vhosts/example.com.

Для виртуальных хостов, основанных на IP-адресе, в файле конфигурации можно использовать следующее:

UseCanonicalName DNS
VirtualDocumentRootIP "/usr/local/apache/vhosts/%1/%2/%3/%4/docs"
VirtualScriptAliasIP  "/usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin"

Запрос http://www.domain.example.com/directory/file.html будет обработан с использованием файла /usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html, если IP-адрес www.domain.example.com равен 10.20.30.40. Запрос http://www.domain.example.com/cgi-bin/script.pl будет обработан запуском программы /usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl.

Если директива VirtualDocumentRoot должна содержать символ ., но он конфликтует с директивой %, проблему можно обойти следующим образом:

VirtualDocumentRoot "/usr/local/apache/vhosts/%2.0.%3.0"

Запрос http://www.domain.example.com/directory/file.html будет обработан с использованием файла /usr/local/apache/vhosts/domain.example/directory/file.html.

Директивы LogFormat %V и %A полезно использовать вместе с этим модулем.

Директива VirtualDocumentRoot

Описание: Динамически настраивает расположение корневого каталога документов для заданного виртуального хоста
Синтаксис:
VirtualDocumentRoot interpolated-directory|none
Значение по умолчанию:
VirtualDocumentRoot none
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_vhost_alias

Директива VirtualDocumentRoot позволяет определить, где Apache HTTP Server будет искать документы, основываясь на значении имени сервера. Результат подстановки interpolated-directory используется в качестве корня дерева документов аналогично аргументу директивы DocumentRoot. Если interpolated-directory равен none, то VirtualDocumentRoot отключается. Эту директиву нельзя использовать в том же контексте, что и VirtualDocumentRootIP.

Примечание

VirtualDocumentRoot переопределит все директивы DocumentRoot, которые могли быть указаны в том же контексте или во вложенных контекстах. Размещение VirtualDocumentRoot в глобальной области конфигурации сервера фактически переопределит директивы DocumentRoot во всех виртуальных хостах, определённых позднее, если только в каждом виртуальном хосте не задать VirtualDocumentRoot равным None.

Директива VirtualDocumentRootIP

Описание: Динамически настраивает расположение корневого каталога документов для заданного виртуального хоста
Синтаксис:
VirtualDocumentRootIP interpolated-directory|none
Значение по умолчанию:
VirtualDocumentRootIP none
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_vhost_alias

Директива VirtualDocumentRootIP аналогична директиве VirtualDocumentRoot, но при подстановке в путь использует IP-адрес серверной стороны соединения, а не имя сервера.

Директива VirtualScriptAlias

Описание: Динамически настраивает расположение каталога CGI для заданного виртуального хоста
Синтаксис:
VirtualScriptAlias interpolated-directory|none
Значение по умолчанию:
VirtualScriptAlias none
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_vhost_alias

Директива VirtualScriptAlias позволяет определить, где Apache httpd будет искать сценарии CGI, аналогично тому, как VirtualDocumentRoot действует для остальных документов. Она обрабатывает запросы URI, начинающиеся с /cgi-bin/, подобно ScriptAlias /cgi-bin/.

Директива VirtualScriptAliasIP

Описание: Динамически настраивает расположение каталога CGI для заданного виртуального хоста
Синтаксис:
VirtualScriptAliasIP interpolated-directory|none
Значение по умолчанию:
VirtualScriptAliasIP none
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_vhost_alias

Директива VirtualScriptAliasIP аналогична директиве VirtualScriptAlias, но при подстановке в путь использует IP-адрес серверной стороны соединения, а не имя сервера.

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_vhost_alias.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API