Apache Версия 2.0 Сервера HTTP
этот документ описывает когда и как использовать действительных хозяев на основе названия.
действительные хозяева на основе IP используют IP адрес связи, чтобы определить правильного действительного хозяина, чтобы служить. Поэтому Вы должны иметь отдельный IP адрес для каждого хозяина. С действительным оказанием гостеприимства на основе названия, сервер полагается на клиента, чтобы сообщить о hostname как часть ударов головой HTTP. Используя эту технику, много различных хозяев могут разделить тот же самый IP адрес.
действительное оказание гостеприимства на основе названия обычно более просто, так как Вы должны только формировать ваш сервер DNS, чтобы нанести на карту каждый hostname к правильному IP адресу и затем формировать Apache Сервер HTTP, чтобы признать различный hostnames. Действительное оказание гостеприимства на основе названия также ослабляет требование на недостаточные IP адреса. Поэтому Вы должны использовать действительное оказание гостеприимства на основе названия, если нет определенная причина выбрать действительное оказание гостеприимства на основе IP. Некоторые причины, почему Вы могли бы рассмотреть использующее действительное оказание гостеприимства на основе IP:
Связанные Модули | Связанные Директивы |
---|---|
чтобы использовать действительное оказание гостеприимства на основе названия, Вы должны определять 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>
контейнер и список это сначала в файле конфигурации.
как упомянуто ранее, есть некоторые клиенты, которые не посылают необходимые данные за действительными хозяевами на основе названия, чтобы работать должным образом. Этим клиентам будут всегда посылать страницы от первого действительного хозяина, перечисленного для того 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
").
это требует небольшого количества дисциплины, но приверженность этим руководящим принципам будет, главным образом, гарантировать, что ваши страницы будут работать со всеми браузерами, новыми и старыми.