Модуль 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