Apache Версия 2.0 Сервера HTTP
действительный кодекс хозяина был полностью переписан в
Apache 1.3
. этот документ пытается объяснить точно, что Apache делает, решая какой действительного хозяина служить хиту от. С помощью нового
NameVirtualHost
директива действительная конфигурация хозяина должна быть намного легче и более безопасной чем с версиями до 1.3.
если Вы только хотите к заставить это работать не понимая, как, вот some examples .
есть a
main_server
который состоит из всех определений, появляющихся вне
<VirtualHost>
секции. Есть действительные серверы, названные
vhosts
, которые определены
<VirtualHost>
секции.
директивы
Listen
,
ServerName
,
ServerPath
, и
ServerAlias
может появиться где-нибудь в пределах определения сервера. Однако, каждое появление отвергает предыдущее появление (в пределах того сервера).
ценность по умолчанию
Listen
область для main_server - 80. main_server не имеет никакого неплатежа
ServerPath
, или
ServerAlias
. неплатеж
ServerName
выведен из IP адреса сервера.
main_server Слушают, директива имеет две функции. Одна функция должна решить, что Apache порта сети по умолчанию свяжет с. Вторая функция должна определить число порта, которое используется в абсолютном URIs в течение, переадресовывает.
в отличие от main_server, vhost порты не делать затронуть, каков держит Apacheа в строевой стойке, прислушивается к связям на.
каждый адрес, появляющийся в
VirtualHost
директива может иметь дополнительный порт. Если порт неуказан это неплатежи к ценности main_server's нового
Listen
утверждение. Специальный порт
*
указывает групповой символ, который соответствует любому порту. Все вместе весь набор адресов (включая многократный
A
сделать запись следствий поисков DNS), называются vhost's
набор адреса
.
если a
NameVirtualHost
директива используется для определенного адреса IP, первый vhost с тем адресом рассматривают как vhost на основе IP. IP адрес может также быть групповым символом
*
.
если на основе названия vhosts должен использоваться a
NameVirtualHost
директива
должен
кажется, с IP набором адреса использовались для vhosts на основе названия. Другими словами, Вы должны определить IP адрес, который держит hostname псевдонимы (CNAMEs) для вашего vhosts на основе названия через a
NameVirtualHost
директива в вашем файле конфигурации.
многократный
NameVirtualHost
директивы могут использоваться каждый с рядом
VirtualHost
директивы, но только один
NameVirtualHost
директива должна использоваться для каждой определенной пары IP:port.
заказ
NameVirtualHost
и
VirtualHost
директивы не важны, который делает следующие два примера идентичными (только заказ
VirtualHost
директивы для
один
набор адреса важен, видеть ниже):
|
|
(чтобы помогать удобочитаемости вашей конфигурации, Вы должны предпочесть левый вариант.)
после парсинга
VirtualHost
директива, vhost серверу дают неплатеж
Listen
равняйтесь порту, назначенному на имя в
VirtualHost
директива.
полный список названий в
VirtualHost
директиву рассматривают точно так же как a
ServerAlias
(но не отвергнуты никем
ServerAlias
утверждение), если все названия решают к тому же самому набору адреса. Отметьте что последующий
Listen
утверждения на этот vhost не будут затрагивать порты, назначенные в наборе адреса.
в течение инициализации список для каждого IP адреса произведен и вставлен в стол мешанины. Если IP адрес используется в a
NameVirtualHost
директива список содержит весь vhosts на основе названия для данного IP адреса. Если нет никаких vhosts, определенных для того адреса
NameVirtualHost
директива игнорируется, и ошибка зарегистрирована. Для vhost на основе IP список в столе мешанины пуст.
из-за быстрой функции hashing верхний из hashing IP адрес в течение запроса является минимальным и почти не существующим. Дополнительно стол оптимизирован для IP адресов, которые изменяются по последнему октету.
поскольку каждые vhost различные ценности по умолчанию установлены. В особенности:
ServerAdmin
,
ResourceConfig
,
AccessConfig
,
Timeout
,
KeepAliveTimeout
,
KeepAlive
,
MaxKeepAliveRequests
,
ReceiveBufferSize
, или
SendBufferSize
директива тогда соответствующая ценность унаследована от main_server. (Таким образом, унаследованный от того, что заключительное урегулирование той ценности находится в main_server.)
по существу, main_server рассматривают как "неплатежи" или "основа", чтобы строить каждый vhost. Но расположение этих main_server определений config файл является в значительной степени несоответствующим - весь config main_server был разобран, когда это заключительное слияние происходит. Так, даже если main_server определение появляется после vhost определения, это могло бы затронуть vhost определение.
если main_server имеет нет
ServerName
в этом пункте, тогда hostname машины это
httpd
продолжается используется вместо этого. Мы будем звонить
набор адреса main_server
те IP адреса, возвращенные поиском DNS на
ServerName
из main_server.
для любого неопределенный
ServerName
области, vhost неплатежи на основе названия к адресу, данному сначала в
VirtualHost
утверждение, определяющее vhost.
любой vhost, который включает волшебство
_default_
групповому символу дают то же самое
ServerName
как main_server.
сервер определяет который vhost использовать для запроса следующим образом:
когда связь сначала сделана клиентом, IP адрес, к которому связанный клиент ищется во внутреннем IP столе мешанины.
если поиск терпит неудачу (IP адрес не был найден), запросу служат от
_default_
vhost, если есть такой vhost для порта, которому клиент послал запрос. Если нет никакого соответствия
_default_
vhost запрос служат от main_server.
если IP адрес не найден в столе мешанины тогда, состязание против числа порта может также привести к входу, соответствующему a
NameVirtualHost *
, который впоследствии обработан как другой vhosts на основе названия.
если поиск преуспел (соответствующий список для IP адреса был найден), следующий шаг должен решить, должны ли мы иметь дело с на основе IP или основой названия vhost.
если вход, который мы нашли, имеет пустой список названия тогда, мы нашли vhost на основе IP, никакие дальнейшие действия не выполнены, и запросу служат от этого vhost.
если вход соответствует vhost на основе названия, список названия содержит одну или более vhost структур. Этот список содержит vhosts в том же самом заказе как
VirtualHost
директивы появляются в config файле.
первый vhost в этом списке (первый vhost в config файле с указанным IP адресом) имеет самый высокий приоритет и ловит любой запрос к неизвестному названию сервера или запросу без a
Host:
область удара головой.
если клиент обеспечил a
Host:
область удара головой список обыскана соответствие vhost и первый хит на a
ServerName
или
ServerAlias
взят и запросу служат от этого vhost. A
Host:
область удара головой может содержать число порта, но Apache всегда соответствует против реального порта, которому клиент послал запрос.
если клиент представил запрос HTTP/1.0 без
Host:
область удара головой, которую мы не знаем, с каким сервером клиент пробовал соединить и любого существующий
ServerPath
подобран против ТУРОВ от запроса. Первая дорожка соответствия в списке используется, и запросу служат от этого vhost.
если никакое соответствие vhost не могло бы быть найдено, что запросу служат спереди vhost с числом порта соответствия, которое находится в списке для IP, с которым клиент соединился (как уже упомянуто прежде).
IP поиск, описанный выше только сделан однажды для специфической сессии TCP/IP, в то время как поиск названия сделан на каждый запрос в течение связи KeepAlive/persistent. Другими словами клиент может просить страницы от различного vhosts на основе названия в течение единственной постоянной связи.
если ТУРЫ от запроса - абсолютные ТУРЫ, и его hostname и порт соответствуют главному серверу или одному из формируемых действительных хозяев и соответствовать адресу и порту, которому клиент послал запрос, тогда scheme/hostname/port приставка раздета прочь, и остающиеся относительные ТУРЫ служится соответствующим главным сервером или действительным хозяином. Если это не соответствует, то ТУРЫ остаются нетронутыми, и запрос взят, чтобы быть запросом по доверенности.
NameVirtualHost
директива.
ServerAlias
и
ServerPath
чеки никогда не выполняются для vhost на основе IP.
_default_
vhost и
NameVirtualHost
директива в пределах config файла не важна. Только заказ vhosts на основе названия для определенного набора адреса существенен. Один vhosts на основе названия, который прибывает сначала в файл конфигурации, имеет самый высокий приоритет для его соответствующего набора адреса.
Host:
область удара головой никогда не используется в течение процесса соответствия. Апач всегда использует реальный порт, которому клиент послал запрос.
ServerPath
директива существует, который является приставкой другого
ServerPath
директива, которая кажется позже в файле конфигурации, тогда прежний будет всегда подбираться, и последний никогда не будет подбираться. (Который принимает это нет
Host:
область удара головой была доступна, чтобы снять неоднозначность двух.)
_default_
vhost ловит запрос, только если нет никакого другого vhost с соответствующим IP адресом
и
число порта соответствия для запроса. Запрос только пойман, если число порта, которому клиент послал запрос, соответствует числу порта вашего
_default_
vhost, который является вашим стандартом
Listen
по умолчанию. Порт группового символа может быть определен (
то есть.
,
_default_:*
), чтобы поймать запросы к любому доступному порту. Это также обращается
NameVirtualHost *
vhosts.
_default_
vhost). Другими словами main_server только ловит запрос о неуказанной комбинации адреса/порта (если нет a
_default_
vhost, который соответствует тому порту).
_default_
vhost или main_server
никогда
подобранный для запроса с неизвестным или недостающий
Host:
область удара головой, если клиент соединился с адресом (и порт), который используется для vhosts на основе названия,
например.
, в a
NameVirtualHost
директива.
VirtualHost
директивы, потому что это вынудит ваш сервер полагаться на DNS к ботинку. Кроме того это излагает угрозу безопасности, если Вы не управляете DNS для всех перечисленных областей. Есть
more information
доступный на этом и следующих двух темах.
ServerName
должен всегда устанавливаться для каждого vhost. Иначе поиск DNS требуется для каждого vhost.
в дополнение к подсказкам на DNS Issues страница, вот - некоторые дальнейшие подсказки:
VirtualHost
определения. (Это должно помочь удобочитаемости конфигурации - post-config, сливающий процесс делает это неочевидным, что определения, смешанные в приблизительно действительных хозяевах могли бы затронуть всех действительных хозяев.)
NameVirtualHost
и
VirtualHost
определения вашу конфигурацию, чтобы гарантировать лучшую удобочитаемость.
ServerPaths
которые являются приставками другого
ServerPaths
. если Вы не можете избежать этого тогда, Вы должны гарантировать, что дольше (более определенный) приставка vhost кажется более ранней в файле конфигурации чем короче (менее определенный) приставка (
то есть.
, "ServerPath / радиовещательная корпорация Эй-би-си" должен появиться после "ServerPath/abc/def").