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

Примеры VirtualHost

этот документ пытается ответить на обычно-спрошенные вопросы о настраивании действительных хозяев. Эти сценарии - те, которые вовлекают многократные вебсайты, бегущие на единственном сервере, через name-based или IP-based действительные хозяева.

top

Running several name-based web sites on a single IP address.

ваш сервер имеет единственный IP адрес, и многократные псевдонимы (CNAMES) указывают на эту машину в DNS. Вы хотите управлять сервером сети для www.example1.com и www.example2.org на этой машине.

отметить

создание действительных конфигураций хозяина на вашем Apacheском сервере волшебно не заставляет записи DNS быть созданными для тех названий хозяина. Вы должен иметь названия в DNS, решая к вашему IP адресу, или никто больше не будет в состоянии видеть ваш вебсайт. Вы можете вставить записи ваш hosts файл для местного испытания, но это будет работать только от машины с теми записями хозяев.

Server configuration

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example1.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example2.org

# Other directives here

</VirtualHost>

звездочки соответствуют всем адресам, таким образом главный сервер не служит никаким запросам. Вследствие того, что www.example1.com является первым в файле конфигурации, это имеет самый высокий приоритет и может быть замечено как неплатеж или первичный сервер. Это означает что, если запрос получен, что не соответствует одному из указанных ServerName директивы, этому будет служить это сначала VirtualHost .

отметить

Вы, если Вы желаете, можете заменить * с фактическим IP адресом системы. В том случае, аргумент VirtualHost должен соответствовать аргументу NameVirtualHost :

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
# etc ...

однако, дополнительно полезно использовать * на системах, где IP адрес не предсказуем - например, если Вы имеете динамический IP адрес с вашим ISP, и Вы используете некоторое разнообразие динамического решения DNS. С тех пор * соответствует любой адрес IP, эта конфигурация работала бы без изменений всякий раз, когда ваш IP адрес изменяется.

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

top

Name-based hosts on more than one IP address.

отметить

любой из методов, обсужденных здесь может быть расширен на любое число IP адресов.

сервер имеет два IP адреса. На одном ( 172.20.30.40 ), мы будем служить "главному" серверу, server.domain.com и на другом ( 172.20.30.50 ), мы будем служить двум или больше действительным хозяевам.

Server configuration

Listen 80

# This is the "main" server running on 172.20.30.40
ServerName server.domain.com
DocumentRoot /www/mainserver

# This is the other address
NameVirtualHost 172.20.30.50

<VirtualHost 172.20.30.50>
DocumentRoot /www/example1
ServerName www.example1.com

# Other directives here ...

</VirtualHost>

<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org

# Other directives here ...

</VirtualHost>

любой запрос к адресу кроме 172.20.30.50 будет служиться от главного сервера. Запрос к 172.20.30.50 с неизвестным hostname, или нет Host: от удара головой, будет служиться www.example1.com .

top

Serving the same content on different IP addresses (such as an internal and external address).

машина сервера имеет два IP адреса ( 192.168.1.1 и 172.20.30.40 ). Машина сидит между внутренним (интранет) сеть и внешняя (интернет-) сеть. Вне сети, названия server.example.com решения к внешнему адресу ( 172.20.30.40 ), но в сети, которую то же самое название решает к внутреннему адресу ( 192.168.1.1 ).

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

Server configuration

NameVirtualHost 192.168.1.1
NameVirtualHost 172.20.30.40

<VirtualHost 192.168.1.1 172.20.30.40>
DocumentRoot /www/server1
ServerName server.example.com
ServerAlias server
</VirtualHost>

теперь запросам от обеих сетей будут служить от того же самого VirtualHost .

отметить:

на внутренней сети, можно только использовать название server а не полностью компетентное название хозяина server.example.com .

отметить также, что, в вышеупомянутом примере, Вы можете заменить список IP адресов с * , который заставит сервер отвечать тому же самому на всех адресах.

top

Running different sites on different ports.

Вы имеете многократные области, идущие в тот же самый IP и также хотите служить многократным портам. Определяя порты в признаке "NameVirtualHost", Вы можете позволить этому работать. Если Вы пробуете использовать <VirtualHost name:port> без NameVirtualHost name:port или Вы пробуете использовать Слушающуюся директиву, ваша конфигурация не будет работать.

Server configuration

Listen 80
Listen 8080

NameVirtualHost 172.20.30.40:80
NameVirtualHost 172.20.30.40:8080

<VirtualHost 172.20.30.40:80>
ServerName www.example1.com
DocumentRoot /www/domain-80
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
ServerName www.example1.com
DocumentRoot /www/domain-8080
</VirtualHost>

<VirtualHost 172.20.30.40:80>
ServerName www.example2.org
DocumentRoot /www/otherdomain-80
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
ServerName www.example2.org
DocumentRoot /www/otherdomain-8080
</VirtualHost>

top

IP-based virtual hosting

сервер имеет два IP адреса ( 172.20.30.40 и 172.20.30.50 ), которые решают к названиям www.example1.com и www.example2.org соответственно.

Server configuration

Listen 80

<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org
</VirtualHost>

запросы о любом адресе, не определенном в одном из <VirtualHost> директивы (, типа localhost , например), пойдет в главный сервер, если будет тот.

top

Mixed port-based and ip-based virtual hosts

машина сервера имеет два IP адреса ( 172.20.30.40 и 172.20.30.50 ), которые решают к названиям www.example1.com и www.example2.org соответственно. В каждом случае, мы хотим управлять хозяевами на портах 80 и 8080.

Server configuration

Listen 172.20.30.40:80
Listen 172.20.30.40:8080
Listen 172.20.30.50:80
Listen 172.20.30.50:8080

<VirtualHost 172.20.30.40:80>
DocumentRoot /www/example1-80
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
DocumentRoot /www/example1-8080
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.50:80>
DocumentRoot /www/example2-80
ServerName www.example1.org
</VirtualHost>

<VirtualHost 172.20.30.50:8080>
DocumentRoot /www/example2-8080
ServerName www.example2.org
</VirtualHost>

top

Mixed name-based and IP-based vhosts

на некоторых из моих адресов, я хочу сделать действительных хозяев на основе названия, и на других, хозяевах на основе IP.

Server configuration

Listen 80

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example1.com
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example2
ServerName www.example2.org
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example3
ServerName www.example3.net
</VirtualHost>

# IP-based
<VirtualHost 172.20.30.50>
DocumentRoot /www/example4
ServerName www.example4.edu
</VirtualHost>

<VirtualHost 172.20.30.60>
DocumentRoot /www/example5
ServerName www.example5.gov
</VirtualHost>

top

Using Virtual_host and mod_proxy together

следующий пример позволяет машину переднего конца полномочию действительный хозяин через сервера, бегущего на другой машине. В примере, действительный хозяин того же самого названия формируется на машине в 192.168.111.2 . ProxyPreserveHost On директива используется так, чтобы через желательный hostname прошли, в случае, если мы - proxying многократный hostnames на единственную машину.

<VirtualHost *:*>
ProxyPreserveHost On
ProxyPass / http://192.168.111.2
ProxyPassReverse / http://192.168.111.2/
ServerName hostname.example.com
</VirtualHost>

top

Using _default_ vhosts

_default_ vhosts for all ports

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

Server configuration

<VirtualHost _default_:*>
DocumentRoot /www/default
</VirtualHost>

Используя такой неплатеж vhost с портом группового символа эффективно предотвращает любой запрос, идущий в главный сервер.

неплатеж vhost никогда не служит запросу, который посылали адресу/порту, который используется для vhosts на основе названия. Если запрос содержал неизвестное или нет Host: удар головой этому всегда служат от первичного vhost на основе названия (vhost для того адреса/порта, кажущегося первым в файле конфигурации).

Вы можете использовать AliasMatch или RewriteRule переписывать любой запрос к единственной информационной странице (или подлинник).

_default_ vhosts for different ports

то же самое как установка 1, но сервер слушает на нескольких портах, и мы хотим использовать секунду _default_ vhost для порта 80.

Server configuration

<VirtualHost _default_:80>
DocumentRoot /www/default80
# ...
</VirtualHost>

<VirtualHost _default_:*>
DocumentRoot /www/default
# ...
</VirtualHost>

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

_default_ vhosts for one port

мы хотим иметь неплатеж vhost для порта 80, но никакого другого неплатежа vhosts.

Server configuration

<VirtualHost _default_:80>
DocumentRoot /www/default
...
</VirtualHost>

запросу к неуказанному адресу на порту 80 служат от неплатежа vhost любой другой запрос к неуказанному адресу, и порту служат от главного сервера.

top

Migrating a name-based vhost to an IP-based vhost

vhost на основе названия с hostname www.example2.org (от нашего name-based пример, установка 2) должна получить ее собственный IP адрес. Избегать проблем с серверами названия или полномочиями, кто припрятал старый IP адрес про запас для vhost на основе названия, который мы хотим обеспечить обоим вариантам в течение фазы перемещения.
решение легко, потому что мы можем просто добавить новый IP адрес ( 172.20.30.50 ) к VirtualHost директива.

Server configuration

Listen 80
ServerName www.example1.com
DocumentRoot /www/example1

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example3
ServerName www.example3.net
ServerAlias *.example3.net
# ...
</VirtualHost>

к vhost можно теперь получить доступ через новый адрес (как vhost на основе IP) и через старый адрес (как vhost на основе названия).

top

Using the ServerPath directive

мы имеем сервер с двумя vhosts на основе названия. Чтобы соответствовать правильному действительному хозяину, клиент должен послать правильное Host: удар головой. Старые клиенты HTTP/1.0 не посылают такой удар головой, и Apache не имеет никакого ключа, какого vhost клиент пробовал достигнуть (и служит запросу от первичного vhost). Чтобы обеспечивать такую большую обратную совместимость насколько возможно, мы создаем первичный vhost, который возвращает единственную страницу, содержащую связи с приставкой URL действительным хозяевам на основе названия.

Server configuration

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
# primary vhost
DocumentRoot /www/subdomain
RewriteEngine On
RewriteRule ^/.* /www/subdomain/index.html
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/subdomain/sub1
ServerName www.sub1.domain.tld
ServerPath /sub1/
RewriteEngine On
RewriteRule ^(/sub1/.*) /www/subdomain$1
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/subdomain/sub2
ServerName www.sub2.domain.tld
ServerPath /sub2/
RewriteEngine On
RewriteRule ^(/sub2/.*) /www/subdomain$1
# ...
</VirtualHost>

из-за ServerPath директива запрос к URL http://www.sub1.domain.tld/sub1/ всегда служивший от sub1-vhost.
запрос к URL http://www.sub1.domain.tld/ только служится от sub1-vhost, если клиент послал правильное Host: удар головой. Если нет Host: удар головой посылают, клиент получает информационную страницу от первичного хозяина.
пожалуйста отметьте, что есть одна причуда: запрос к http://www.sub2.domain.tld/sub1/ также служится от sub1-vhost, если клиент послал нет Host: удар головой.
RewriteRule директивы используются, чтобы удостовериться, что клиент, который послал правильное Host: удар головой может использовать оба варианта URL, то есть. , с или без приставки URL.