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