<-
Apache > HTTP Server > Documentation > Version 2.0 > Virtual Hosts

Действительная Поддержка Хозяина на основе названия

этот документ описывает когда и как использовать действительных хозяев на основе названия.

см. также

top

Name-based vs. IP-based Virtual Hosts

действительные хозяева на основе IP используют IP адрес связи, чтобы определить правильного действительного хозяина, чтобы служить. Поэтому Вы должны иметь отдельный IP адрес для каждого хозяина. С действительным оказанием гостеприимства на основе названия, сервер полагается на клиента, чтобы сообщить о hostname как часть ударов головой HTTP. Используя эту технику, много различных хозяев могут разделить тот же самый IP адрес.

действительное оказание гостеприимства на основе названия обычно более просто, так как Вы должны только формировать ваш сервер DNS, чтобы нанести на карту каждый hostname к правильному IP адресу и затем формировать Apache Сервер HTTP, чтобы признать различный hostnames. Действительное оказание гостеприимства на основе названия также ослабляет требование на недостаточные IP адреса. Поэтому Вы должны использовать действительное оказание гостеприимства на основе названия, если нет определенная причина выбрать действительное оказание гостеприимства на основе IP. Некоторые причины, почему Вы могли бы рассмотреть использующее действительное оказание гостеприимства на основе IP:

top

Using Name-based Virtual Hosts

чтобы использовать действительное оказание гостеприимства на основе названия, Вы должны определять IP адрес (и возможно порт) на сервере, который будет принимать запросы о хозяевах. Это формируется, используя NameVirtualHost директива. В нормальном случае, где любой и все IP адреса на сервере должны использоваться, Вы можете использовать * как аргумент NameVirtualHost . если Вы планируете использовать многократные порты (например бегущий SSL), Вы должны добавить Порт к аргументу, типа *:80 . отметить что упоминание IP адреса в a NameVirtualHost директива автоматически не заставляет сервер слушать тот IP адрес. См. Setting which addresses and ports Apache uses для большего количества деталей. Кроме того, любой IP адрес, определенный здесь должен быть связан с интерфейсом сети на сервере.

следующий шаг должен создать a <VirtualHost> блок для каждого различного хозяина, которому Вы хотели бы служить. Аргумент <VirtualHost> директива должна быть тем же самым как аргумент NameVirtualHost директива (то есть, IP адрес, или * для всех адресов). В каждом <VirtualHost> блок, Вы будете нуждаться в минимуме a ServerName директива, чтобы назвать, какому хозяину служат и a DocumentRoot директива, чтобы показать, где в файловой системе содержание для тех жизней хозяина.

главный хозяин уходит

если Вы добавляете действительных хозяев существующего сервера сети, Вы должны также создать a <VirtualHost> блок для существующего хозяина. ServerName и DocumentRoot включен в этого действительного хозяина должен быть тем же самым как глобальное ServerName и DocumentRoot . перечислить этого действительного хозяина сначала в файле конфигурации так, чтобы это действовало как хозяин по умолчанию.

например, предположите, что Вы служите области www.domain.tld и Вы желаете добавить действительного хозяина www.otherdomain.tld , который указывает на тот же самый IP адрес. Тогда Вы просто добавляете следующий к httpd.conf :

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>

Вы можете альтернативно определить явный IP адрес вместо * в обоих NameVirtualHost и <VirtualHost> директивы. Например, Вы могли бы хотеть сделать это, чтобы управлять некоторыми действительными хозяевами на основе названия на одном IP адресе, и или на основе IP, или другом наборе действительных хозяев на основе названия на другом адресе.

много серверов хотят быть доступным больше чем одним названием. Это возможно с ServerAlias директива, помещенная в <VirtualHost> секция. Например в первом <VirtualHost> блок выше, ServerAlias директива указывает, что перечисленные названия - другие названия, которые люди могут использовать, чтобы видеть что тот же самый вебсайт:

ServerAlias domain.tld *.domain.tld

тогда запросы обо всех хозяевах в domain.tld области будут служить www.domain.tld действительный хозяин. Характеры группового символа * и ? может использоваться, чтобы соответствовать названиям. Конечно, Вы не можете только составить названия и разместить их в ServerName или ServerAlias . Вы должны сначала иметь ваш сервер DNS, должным образом формируемый, чтобы нанести на карту те названия к IP адресу, связанному с вашим сервером.

наконец, Вы можете точно настроить конфигурацию действительных хозяев, помещая другие директивы в <VirtualHost> контейнеры. Большинство директив может быть помещено в эти контейнеры и тогда изменит конфигурацию только уместного действительного хозяина. Чтобы узнавать, позволяется ли специфическая директива, проверьте Context из директивы. Директивы конфигурации начинаются главный контекст сервера (вне любого <VirtualHost> контейнер), будет использоваться, только если они не отвергнуты действительными параметрами настройки хозяина.

теперь, когда запрос прибывает, сервер сначала проверит, использует ли это IP адрес, который соответствует NameVirtualHost . если это, то это будет смотреть на каждого <VirtualHost> секция с соответствующим IP адресом и попыткой находить тот, где ServerName или ServerAlias соответствует требуемому hostname. Если это находит один, то это использует конфигурацию для того сервера. Если никакой соответствующий действительный хозяин не найден, то первый перечисленный действительный хозяин это соответствует, IP адрес будет использоваться.

как следствие, первый перечисленный действительный хозяин- неплатеж действительный хозяин. DocumentRoot от главный сервер будет никогда использоваться, когда IP адрес соответствует NameVirtualHost директива. Если Вы хотели бы иметь специальную конфигурацию для запросов, которые не делают соответствовать любому специфическому действительному хозяину, просто помещать ту конфигурацию в a <VirtualHost> контейнер и список это сначала в файле конфигурации.

top

Compatibility with Older Browsers

как упомянуто ранее, есть некоторые клиенты, которые не посылают необходимые данные за действительными хозяевами на основе названия, чтобы работать должным образом. Этим клиентам будут всегда посылать страницы от первого действительного хозяина, перечисленного для того IP адреса ( первичный действительный хозяин на основе названия).

насколько старше?

пожалуйста отметьте, что, когда мы говорим старший, мы действительно подразумеваем старший. Вы очень вряд ли столкнетесь с одним из этих браузеров в использовании сегодня. Все текущие версии любого браузера посылают Host удар головой как требуется для действительных хозяев на основе названия.

есть возможная работа с ServerPath директива, хотя немного тяжелый:

конфигурация примера:

NameVirtualHost 111.22.33.44

<VirtualHost 111.22.33.44>
ServerName www.domain.tld
ServerPath /domain
DocumentRoot /web/domain
</VirtualHost>

что это означает? Это означает что запрос о любых ТУРАХ, начинающихся " /domain "будет служиться от действительного хозяина www.domain.tld . это означает, что к страницам можно получить доступ как http://www.domain.tld/domain/ для всех клиентов, хотя клиенты, посылающие a Host: удар головой может также получить доступ к этому как http://www.domain.tld/ .

чтобы сделать эту работу, поместите связь в страницу вашего первичного действительного хозяина к http://www.domain.tld/domain/ . тогда, в страницах действительного хозяина, убедитесь, что использовали любые просто относительные связи ( например. , " file.html "или" ../icons/image.gif ") или связи, содержащие предстолкновение /domain/ ( например. , " http://www.domain.tld/domain/misc/file.html "или" /domain/misc/file.html ").

это требует небольшого количества дисциплины, но приверженность этим руководящим принципам будет, главным образом, гарантировать, что ваши страницы будут работать со всеми браузерами, новыми и старыми.