Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_vhost_alias

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

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

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

Примечание

Если mod_alias или mod_userdir используются для преобразования URI в имена файлов, они переопределят директивы 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