Apache virtualhost: Apache Virtual Host documentation — Apache HTTP Server Version 2.4

Содержание

Apache HTTP Server — VirtualHost Examples Этот документ пытается ответить на часто задаваемые вопросы о настройке виртуальных хостов.

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

Запуск нескольких сайтов с именами на одном IP-адресе.

Ваш сервер имеет несколько имен хостов, которые разрешаются по одному адресу, и вы хотите по-разному отвечать для www.example.com и www.example.org .

Note

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

# Убедитесь, что Apache прослушивает порт 80
Listen 80
<VirtualHost *:80>
    DocumentRoot "/www/example1"
    ServerName www.example.com
    # Другие директивы здесь
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot "/www/example2"
    ServerName www.example.org
    # Другие директивы здесь
</VirtualHost>

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

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

Note

Вы можете заменить * конкретным IP-адресом в системе. Такие виртуальные хосты будут использоваться только для HTTP-запросов, полученных при подключении к указанному IP-адресу.

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

Хосты,основанные на именах,на нескольких IP-адресах.

Note

Любая из рассмотренных здесь методик может быть расширена на любое количество IP-адресов.

Сервер имеет два IP-адреса. На одном ( 172.20.30.40 ) мы будем обслуживать «основной» сервер server.example.com , а на другом ( 172.20.30.50 ) мы будем обслуживать два или более виртуальных хоста.

Listen 80
# Это "основной" сервер, работающий на 172.20.30.40
ServerName server.example.com
DocumentRoot "/www/mainserver"
<VirtualHost 172.20.30.50>
    DocumentRoot "/www/example1"
    ServerName www.example.com
    # Остальные директивы здесь ...
</VirtualHost>
<VirtualHost 172.20.30.50>
    DocumentRoot "/www/example2"
    ServerName www.example.org
    # Остальные директивы здесь ...
</VirtualHost>

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

Серверный компьютер имеет два IP-адреса ( 192.168.1.1 и 172.20.30.40 ). Устройство находится между внутренней (интранет) сетью и внешней (интернет) сетью. За пределами сети имя server.example.com преобразуется во внешний адрес ( 172.20.30.40 ), но внутри сети это же имя преобразуется во внутренний адрес ( 192. 168.1.1 ).

Сервер можно заставить отвечать на внутренние и внешние запросы одним и тем же содержимым, используя только один раздел

<VirtualHost> .

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

Теперь запросы из обеих сетей будут обслуживаться с одного и того же <VirtualHost> .

Note:

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

Также обратите внимание, что в приведенном выше примере вы можете заменить список IP-адресов на * , что приведет к тому, что сервер ответит одинаково на все адреса.

Запуск разных сайтов в разных портах.

У вас есть несколько доменов,идущих на один IP,а также вы хотите обслуживать несколько портов.Пример ниже показывает,что сопоставление имен происходит после определения наилучшей комбинации IP-адресов и портов.

Listen 80
Listen 8080
<VirtualHost 172.20.30.40:80>
    ServerName www.example.com
    DocumentRoot "/www/domain-80"
</VirtualHost>
<VirtualHost 172.20.30.40:8080>
    ServerName www.example.com
    DocumentRoot "/www/domain-8080"
</VirtualHost>
<VirtualHost 172.20.30.40:80>
    ServerName www.example.org
    DocumentRoot "/www/otherdomain-80"
</VirtualHost>
<VirtualHost 172.20.30.40:8080>
    ServerName www.example.org
    DocumentRoot "/www/otherdomain-8080"
</VirtualHost>

виртуальный IP-хостинг

Сервер имеет два IP-адреса ( 172.20.30.40 и 172.20.30.50 ), которые соответствуют именам www.example.com и www.example.org соответственно.

Listen 80
<VirtualHost 172.20.30.40>
    DocumentRoot "/www/example1"
    ServerName www.example.com
</VirtualHost>
<VirtualHost 172.20.30.50>
    DocumentRoot "/www/example2"
    ServerName www.example.org
</VirtualHost>

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

Смешанные виртуальные хосты на основе портов и ip-адресов

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

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.example.com
</VirtualHost>
<VirtualHost 172.20.30.40:8080>
    DocumentRoot "/www/example1-8080"
    ServerName www.example.com
</VirtualHost>
<VirtualHost 172.20.30.50:80>
    DocumentRoot "/www/example2-80"
    ServerName www.example.org
</VirtualHost>
<VirtualHost 172.20.30.50:8080>
    DocumentRoot "/www/example2-8080"
    ServerName www.example.org
</VirtualHost>

Смешанные призраки,основанные на именах и IP-адресах

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

Listen 80
<VirtualHost 172.20.30.40>
    DocumentRoot "/www/example1"
    ServerName www.example.com
</VirtualHost>
<VirtualHost 172.20.30.40>
    DocumentRoot "/www/example2"
    ServerName www.example.org
</VirtualHost>
<VirtualHost 172.20.30.40>
    DocumentRoot "/www/example3"
    ServerName www.example.net
</VirtualHost>
# IP-based
<VirtualHost 172.20.30.50>
    DocumentRoot "/www/example4"
    ServerName www.example.edu
</VirtualHost>
<VirtualHost 172.20.30.60>
    DocumentRoot "/www/example5"
    ServerName www.example.gov
</VirtualHost>

Virtual_host использование Virtual_host и mod_proxy

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

192.168.111.2 . Директива ProxyPreserveHost On используется для передачи желаемого имени хоста, если мы проксируем несколько имен хостов на одну машину.

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

Использование

_default_ vhosts

_default_ vhosts для всех портов

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

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

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

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

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

_default_ vhosts для разных портов

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

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

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

_default_ vhosts для одного порта

Мы хотим иметь фрост по умолчанию для порта 80,но никаких других фрост по умолчанию.

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

Запрос на неопределенный адрес на порту 80 обслуживается из vhost по умолчанию.Любой другой запрос на неопределенный адрес и порт обслуживается с основного сервера.

Любое использование * в объявлении виртуального хоста будет иметь более высокий приоритет, чем _default_ .

Миграция фантома,основанного на имени,на фантома,основанного на IP.

Основанный на имени www.example.org с именем хоста www.example.org (из нашего примера на основе имени , настройка 2) должен получить свой собственный IP-адрес. Чтобы избежать проблем с серверами имен или прокси-серверами, которые кэшировали старый IP-адрес для хоста на основе имен, мы хотим предоставить оба варианта на этапе миграции.

Решение легко, потому что мы можем просто добавить новый IP-адрес ( 172.20.30.50 ) в директиву VirtualHost .

Listen 80
ServerName www.example.com
DocumentRoot "/www/example1"
<VirtualHost 172. 20.30.40 172.20.30.50>
    DocumentRoot "/www/example2"
    ServerName www.example.org
    # ...
</VirtualHost>
<VirtualHost 172.20.30.40>
    DocumentRoot "/www/example3"
    ServerName www.example.net
    ServerAlias *.example.net
    # ...
</VirtualHost>

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

Использование директивы

ServerPath

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


  • 1
  • 284
  • 285
  • 286
  • 287
  • 288
  • 291
  • Next

Пределы описания файлов


Apache: примеры создания VirtualHost

Apache: примеры создания VirtualHost

Что такое VirtualHost можно почитать на Wiki.

Все примеры приведены в системе FreeBSD 8.2 и Apache 2.2, но подойдут для любой другой ОС (учтите только другие пути к файлам конфигурации).

В статье не будут рассмотрены вопросы создания и настройки доменов и субдоменов на DNS – это совсем другая тема. Если вы не используете свой собственный DNS и не знаете как настроить домен – проще всего воспользоваться этой>>> ссылкой или спросить совета у вашего регистратора доменного имени.

Для примеров используются следующие данные:

2 IP-адреса:

77.120.106.40
77.120.106.52

2 домена и 1 субдомен:

it-news.in.ua
website.co.ua
vhost1.website.co.ua

Для простоты, все пути к служебным каталогам остаются по-умолчанию, т.е. такими, какие они были после установки Apache:

ServerRoot “/usr/local”
DocumentRoot “/usr/local/www/apache22/data”

Если планируется создание только одного VirtualHost-а, то все записи можно производить прямо в файле /usr/local/etc/apache22/httpd. conf. Но правильнее будет все настройки виртуалов хранить в файле /usr/local/etc/apache22/httpd-vhosts.conf. Для этого, в конце файла /usr/local/etc/apache22/httpd.conf раскомментируйте строку:

#Virtual hosts
#Include etc/apache22/extra/httpd-vhosts.conf

Содержание

Запуск нескольких name-based виртуалов на одном IP-адресе

#Укажем Apache слушать порт 80
Listen 80

#Слушать запросы к виртуалам на всех IP-адресах:
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot www/apache22/data/website.co.ua
ServerName www.example.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot www/apache22/data/it-news.in.ua
ServerName www.example.org
</VirtualHost>

В этом примере website.co.ua находится первым в списке виртуалхостов, поэтому в случае, если к серверу придет запрос без определённого ServerName, то будет показано содержимое website.co.ua.

Если вы хотите, то можно указать реальный IP-адрес сервера, в таком случае параметр VirtualHost должен совпадать с NameVirtualHost:

NameVirtualHost 77.120.106.40
<VirtualHost 77.120.106.40:80>

</VirtualHost>

Но, как правило, используется параметр *, обозначающий любой IP-адрес. Это полезно, например, если вы используете услугу типа No-Ip, позволяющую привязать динамический IP-адрес к домену.

Name-based хосты на сервере с несколькими IP-адресами

У сервера есть два IP-адреса: 77.120.106.40 и 77.120.106.52.  Запустим 1 “главный” сайт, и несколько “вторичных”:

Listen 80
# Это “главный” сайт, работающий на IP-адресе 77.120.106.40
ServerName website.co.ua
DocumentRoot www/apache22/data/website.co.ua

# А это “вторичные” сайты:
NameVirtualHost 172.20.30.50
<VirtualHost 77.120.106.52>
DocumentRoot www/apache22/data/vhost1. website.co.ua
ServerName vhost1.website.co.ua
</VirtualHost>

<VirtualHost 77.120.106.52>
DocumentRoot www/apache22/data/it-news.in.ua
ServerName it-news.in.ua
</VirtualHost>

Все запросы на адреса, отличные от 77.120.106.52 будут переданы “главному” сайту. Все запросы к 77.120.106.52 с неуказанным HostName будут переданы к website.co.ua.

Обслуживание одного виртуала по разным IP-адресам (например, локальной и внешней сети)

У сервера есть две сети с двумя разными адресами – 77.120.106.40 (внешняя сеть) и 192.168.0.1 (внутренняя сеть). Из мира адрес  website.co.ua направлен на 77.120.106.40, а изнутри имя server направлено на 192.168.0.1. По обоим запросам, как из внешней сети, так и из внутренней, сервер будет выдавать содержимое одного и того же виртуалхоста:

NameVirtualHost 192.168.0.1
NameVirtualHost 77.120.106.40

<VirtualHost 192. 168.0.1 77.120.106.40>
DocumentRoot www/apache22/data/website.co.ua
ServerName website.co.ua
ServerAlias server
</VirtualHost>

Обслуживание разных сайтов на разных портах

Можно обрабатывать запросы к разным  и/или одинаковым доменам на разные порты, выдавая разное содержимое:

Listen 80
Listen 8080

NameVirtualHost 77.120.106.40:80
NameVirtualHost 77.120.106.40:8080

#по запросу website.co.ua и стандартному http-порту 80 выдаем
#содержимое каталога /usr/local/www/apache22/data/www/website.co.ua-80
<VirtualHost 77.120.106.40:80>
ServerName website.co.ua
DocumentRoot www/apache22/data/www/website.co.ua-80
</VirtualHost>

#по запросу website.co.ua и не-стандартному http-порту 8080 выдаем
#содержимое каталога /usr/local/www/apache22/data/www/website.co.ua-8080
<VirtualHost 77.120.106.40:8080>
ServerName website.co.ua
DocumentRoot www/apache22/data/www/website.co.ua-8080
</VirtualHost>

#то же самое, на том же сервере, но для домена it-news. in.ua
<VirtualHost 77.120.106.40:80>
ServerName it-news.in.ua
DocumentRoot www/apache22/data/www/it-news.in.ua-80
</VirtualHost>

<VirtualHost 77.120.106.40:8080>
ServerName it-news.in.ua
DocumentRoot www/apache22/data/www/it-news.in.ua-8080
</VirtualHost>

IP-based виртуалхосты

У сервера есть два IP-адреса и два домена: it-news.in.ua с адресом 77.120.106.40 и website.co.ua с адресом 77.120.106.52:

Listen 80

<VirtualHost 77.120.106.40>
DocumentRoot www/apache22/data/www/it-news.in.ua
ServerName it-news.in.ua
</VirtualHost>

<VirtualHost 77.120.106.52>
DocumentRoot www/apache22/data/www/website.co.ua
ServerName website.co.ua
</VirtualHost>

Смешанные port-based и ip-based виртуалхосты

Listen 77.120.106.40:80
Listen 77.120.106.40:8080
Listen 77.120.106.52:80
Listen 77.120.106.52:8080

<VirtualHost 77. 120.106.40:80>
DocumentRoot www/apache22/data/www/website.co.ua-80
ServerName website.co.ua
</VirtualHost>

<VirtualHost 77.120.106.40:8080>
DocumentRoot www/apache22/data/www/website.co.ua-8080
ServerName website.co.ua
</VirtualHost>

<VirtualHost 77.120.106.52:80>
DocumentRoot www/apache22/data/www/it-news.in.ua-80
ServerName it-news.in.ua
</VirtualHost>

<VirtualHost 77.120.106.52:8080>
DocumentRoot www/apache22/data/www/it-news.in.ua-8080
ServerName it-news.in.ua
</VirtualHost>

В статье использовалась документация с официального сайта веб-сервера Apache.


Раздел: Apache HTTP Server HOWTO’s Метки: Apache HTTP Server, VirtualHost

More results…

Exact matches only

Exact matches only

Search in title

Search in title

Search in content

Search in content

Search in excerpt

Hidden

Hidden

Navigation

a

Самое читаемое

  • CentOS: установка, настройка Zabbix-agent и добавление нового хоста в мониторинг — 507 195 views
  • MySQL/MariaDB: наиболее используемые команды, примеры — 289 268 views
  • BASH: описание циклов for, while, until и примеры использования — 152 257 views
  • Команда find и её опции в примерах — 139 703 views
  • Карта сайта — 131 688 views

Архив месяца

Декабрь 2022
ПнВтСрЧтПтСбВс
 1234
567891011
12131415161718
19202122232425
262728293031 

Архивы по годам

Архивы по годам Выберите месяц Октябрь 2022  (4) Сентябрь 2022  (1) Июнь 2022  (1) Май 2022  (1) Апрель 2022  (1) Март 2022  (2) Январь 2022  (1) Декабрь 2021  (3) Ноябрь 2021  (8) Октябрь 2021  (4) Сентябрь 2021  (5) Август 2021  (5) Июль 2021  (6) Июнь 2021  (6) Май 2021  (6) Апрель 2021  (11) Март 2021  (8) Февраль 2021  (6) Январь 2021  (1) Декабрь 2020  (1) Ноябрь 2020  (9) Октябрь 2020  (9) Сентябрь 2020  (4) Август 2020  (8) Июль 2020  (4) Июнь 2020  (3) Май 2020  (5) Апрель 2020  (9) Март 2020  (8) Февраль 2020  (9) Январь 2020  (2) Декабрь 2019  (9) Ноябрь 2019  (9) Октябрь 2019  (11) Сентябрь 2019  (11) Август 2019  (10) Июль 2019  (2) Июнь 2019  (4) Май 2019  (9) Апрель 2019  (13) Март 2019  (32) Февраль 2019  (20) Январь 2019  (10) Декабрь 2018  (9) Ноябрь 2018  (12) Октябрь 2018  (15) Сентябрь 2018  (12) Август 2018  (14) Июль 2018  (17) Июнь 2018  (18) Май 2018  (21) Апрель 2018  (6) Март 2018  (18) Февраль 2018  (7) Январь 2018  (13) Декабрь 2017  (14) Ноябрь 2017  (6) Октябрь 2017  (24) Сентябрь 2017  (13) Август 2017  (15) Июль 2017  (11) Июнь 2017  (11) Май 2017  (11) Апрель 2017  (7) Март 2017  (18) Февраль 2017  (13) Январь 2017  (14) Декабрь 2016  (12) Ноябрь 2016  (15) Октябрь 2016  (13) Сентябрь 2016  (21) Август 2016  (19) Июль 2016  (14) Июнь 2016  (8) Май 2016  (24) Апрель 2016  (15) Март 2016  (19) Февраль 2016  (21) Январь 2016  (19) Декабрь 2015  (17) Ноябрь 2015  (17) Октябрь 2015  (14) Сентябрь 2015  (13) Август 2015  (1) Июль 2015  (20) Июнь 2015  (23) Май 2015  (26) Апрель 2015  (28) Март 2015  (30) Февраль 2015  (26) Январь 2015  (24) Декабрь 2014  (31) Ноябрь 2014  (21) Октябрь 2014  (28) Сентябрь 2014  (23) Август 2014  (31) Июль 2014  (23) Июнь 2014  (11) Май 2014  (14) Апрель 2014  (8) Март 2014  (11) Февраль 2014  (11) Январь 2014  (11) Декабрь 2013  (12) Ноябрь 2013  (23) Октябрь 2013  (20) Сентябрь 2013  (30) Август 2013  (20) Июль 2013  (6) Июнь 2013  (9) Май 2013  (5) Апрель 2013  (13) Март 2013  (22) Февраль 2013  (36) Январь 2013  (10) Декабрь 2012  (4) Ноябрь 2012  (8) Октябрь 2012  (13) Сентябрь 2012  (29) Август 2012  (24) Июль 2012  (18) Июнь 2012  (2) Май 2012  (4) Март 2012  (5) Февраль 2012  (5) Январь 2012  (25) Декабрь 2011  (15) Ноябрь 2011  (6) Август 2011  (13)

Iconic One Theme | Powered by WordPress

Подробное обсуждение сопоставления виртуальных хостов

HTTP-сервер Apache, версия 2. 4

Доступные языки:  en  | фр  | ко | tr 

Этот документ пытается объяснить именно то, что делает Apache HTTP Server при выборе виртуального хоста служить запрос от.

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

Если вы хотите разобраться во всех деталях, то можете вернуться на эту страницу.

  • Файл конфигурации
  • Соответствие виртуального хоста
  • Советы

См. также

  • Поддержка виртуальных хостов на основе IP
  • Поддержка виртуальных хостов на основе имен
  • Примеры виртуальных хостов для общих настроек
  • Динамически настроенный массовый виртуальный хостинг состоит из всех определения, выходящие за рамки разделов.

    Есть виртуальные серверы, называемые vhosts , которые определяются <Виртуальный хост> разделы.

    Каждая директива VirtualHost включает один или более адресов и дополнительных портов.

    Имена хостов могут использоваться вместо IP-адресов в виртуальном определение хоста, но они разрешаются при запуске и если любое имя разрешения не выполняются, эти определения виртуальных хостов игнорируются. Поэтому это не рекомендуется.

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

    Адрес, появляющийся в VirtualHost директива может иметь необязательный порт. Если порт не указан, он рассматривается как подстановочный порт, который также может быть указан явно используя * . Порт с подстановочным знаком соответствует любому порту.

    (Номера портов указаны в VirtualHost директива сделать не влияют на то, какие номера портов будет прослушивать Apache, они только контролируют который VirtualHost будет выбран для обработки запроса. Используйте директиву Listen для контролировать адреса и порты, на которых сервер прослушивает.)

    В совокупности весь набор адресов (включая несколько результаты поиска DNS) называются набор адресов .

    Apache автоматически различает основа HTTP Заголовок узла , предоставленный клиентом всякий раз, когда наиболее конкретное совпадение для комбинации IP-адреса и порта указан в нескольких виртуальных хостах.

    Имя_сервера директива может появиться где угодно в пределах определения сервера. Однако, каждое появление переопределяет предыдущее появление (в пределах этого сервер). Если ServerName не указано, сервер пытается вывести его из IP-адреса сервера.

    Первый виртуальный хост на основе имени в файле конфигурации для заданная пара IP:порт важна, потому что она используется для всех запросы, полученные на тот адрес и порт, для которых нет других vhost для этой пары IP:порт имеет соответствующее имя сервера или Псевдоним сервера. Он также используется для всех SSL-соединений, если server не поддерживает индикацию имени сервера.

    Полный список имен в VirtualHost директивы обрабатываются так же, как (без подстановочных знаков) ServerAlias ​​ (но не переопределяются какой-либо инструкцией ServerAlias ​​).

    Для каждого виртуального хоста устанавливаются различные значения по умолчанию. В в частности:

    1. Если vhost не имеет ServerAdmin , Время ожидания , KeepAliveTimeout , KeepAlive , MaxKeepAliveRequests , ReceiveBufferSize , или SendBufferSize директива, то соответствующее значение наследуется от основной сервер. (То есть, унаследованное от любого конечного установка этого значения находится на основном сервере.)
    2. «Поиск по умолчанию», определяющий каталог по умолчанию. разрешения для виртуального хоста объединяются с разрешениями основной сервер. Это включает в себя любую конфигурацию для каждого каталога информация для любого модуля.
    3. Конфигурации каждого сервера для каждого модуля из основной сервер объединен с сервером vhost.

    По сути, главный сервер рассматривается как «по умолчанию» или «база», на которой будет строиться каждый виртуальный хост. Но позиционирование эти основные определения сервера в файле конфигурации в значительной степени неактуально — вся конфигурация основного сервера была анализируется, когда происходит это окончательное слияние. Так что даже если главный сервер определение появляется после определения виртуального хоста, это может повлиять на определение виртуального хоста.

    Если на основном сервере нет ServerName на данный момент точка, затем имя хоста машины, которая httpd вместо этого используется. Назовем адрес основного сервера установить те IP-адреса, которые возвращаются поиском DNS на ServerName главного сервера.

    Для любых неопределенных ServerName полей vhost на основе имени по умолчанию использует адрес, указанный первым в Оператор VirtualHost , определяющий vhost.

    Любой виртуальный хост, включающий магию _default_ подстановочный знак получает тот же ServerName , что и основной сервер.

    Сервер определяет, какой виртуальный хост использовать для запроса, как следующим образом:

    Поиск IP-адреса

    Когда соединение впервые получено по какому-либо адресу и порту, сервер ищет все определения VirtualHost которые имеют одинаковый IP-адрес и порт.

    Если нет точного совпадения адреса и порта, то подстановочный знак ( * ) учитываются совпадения.

    Если совпадений не найдено, запрос обслуживается основной сервер.

    Если есть определения VirtualHost для IP-адрес, следующим шагом будет решить, должны ли мы иметь дело с виртуальным хостом на основе IP или имени.

    Vhost на основе IP

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

    vhost на основе имени

    Если имеется несколько директив VirtualHost комбинация IP-адреса и порта, которая была определена как наилучшее совпадение, «список» в оставшихся шагах относится к списку vhosts которые совпали, в том порядке, в котором они были в файле конфигурации.

    Если соединение использует SSL, сервер поддерживает указание имени сервера и рукопожатие клиента SSL включает расширение TLS с запрошенное имя хоста, то это имя хоста используется ниже точно так же, как Хост: заголовок будет использоваться для соединения без SSL. В противном случае первый виртуальный хост на основе имени, адрес которого совпадает, используется для SSL-соединений. Это важно, потому что vhost определяет, какой сертификат сервер будет использовать для связь.

    Если запрос содержит поле заголовка Host: , list ищется первый vhost с совпадающим ServerName или ServerAlias ​​ и запрос обслуживается с этого виртуального хоста. А Хост: заголовок поле может содержать номер порта, но Apache всегда его игнорирует и соответствует реальному порту, на который клиент отправил запрос.

    Первый vhost в конфиге файл с указанным IP-адресом имеет наивысший приоритет и перехватывает любой запрос к неизвестному имени сервера или запрос без поля заголовка Host: (например, HTTP/1. 0 запрос).

    Постоянные соединения

    Поиск IP , описанный выше, выполняется только один раз на конкретный сеанс TCP/IP, в то время как поиск имени выполняется на каждые запросов во время KeepAlive/persistent связь. Другими словами, клиент может запросить страницы из разные виртуальные хосты на основе имен в течение одного постоянного связь.

    Абсолютный URI

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

    Наблюдения

    • Виртуальный хостинг на основе имени — это процесс, применяемый после сервер выбрал наиболее подходящий виртуальный IP-адрес. хозяин.
    • Если вам все равно, к какому IP-адресу подключился клиент, используйте «*» в качестве адреса каждого виртуального хоста и виртуального хостинга на основе имени применяется ко всем настроенным виртуальным хостам.
    • Имя_сервера и Псевдоним сервера проверки никогда не выполняются для виртуального хоста на основе IP.
    • Только заказ виртуальные хосты на основе имени для определенного набора адресов имеют большое значение. Один виртуальный хост на основе имени, который идет первым в конфигурационный файл имеет наивысший приоритет для своего установлен соответствующий адрес.
    • Любой порт в поле заголовка Host: никогда не используется во время процесс сопоставления. Apache всегда использует реальный порт, к которому клиент отправил запрос.
    • Если два виртуальных хоста имеют общий адрес, эти общие адреса действовать как виртуальные хосты на основе имени неявно. Это новое поведение с 2.3.11.
    • Основной сервер используется только для обслуживания запроса, если IP-адрес адрес и номер порта, к которому подключился клиент не соответствует ни одному виртуальному хосту (включая * vhost). Другими словами, основной сервер ловит только запрос на неуказанный адрес/порт комбинация (если нет _default_ vhost который соответствует этому порту).
    • Никогда не следует указывать DNS-имена в Директивы VirtualHost , потому что это заставит ваш сервер, чтобы полагаться на DNS для загрузки. Кроме того, это создает угроза безопасности, если вы не контролируете DNS для всех перечислены домены. Есть больше информация, доступная по этому и следующим двум темы.
    • Имя_сервера должно всегда устанавливаться для каждого вхост. В противном случае требуется поиск DNS для каждого вхост.

    В дополнение к советам на странице проблем с DNS, здесь еще несколько советов:

    • Поместите все определения основных серверов перед любыми определений VirtualHost . (Это в помощь удобочитаемость конфигурации — слияние после конфигурации процесс делает неочевидным, что определения смешиваются вокруг виртуальные хосты могут повлиять на все виртуальные хосты.)

    Примечание:
    Это не раздел вопросов и ответов. Комментарии, размещенные здесь, должны указывать на предложения по улучшению документации или сервера и могут быть удалены нашими модераторами, если они либо реализованы, либо считаются недействительными/не по теме. Вопросы о том, как управлять HTTP-сервером Apache, следует направлять либо на наш IRC-канал #httpd, на Libera.chat, либо в наши списки рассылки.

    Как настроить виртуальный хост Apache

    В Apache (httpd) виртуальные хосты используются для размещения веб-контента для нескольких доменов за пределами одного сервера в зависимости от используемого IP-адреса или доменного имени. В зависимости от полученного запроса могут применяться различные конфигурации виртуального хоста, что приводит к тому, что разные настройки и веб-контент обслуживаются с одного веб-сервера. Например, веб-сервер с одним IP-адресом может содержать несколько доменных имен, таких как example.com, example.org и многие другие.

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



    Готовитесь к сертификации RHCE? Посмотрите наш видеокурс RHCE на Udemy со скидкой 20% при использовании кода ROOTUSER.


    Пример конфигурации виртуального хоста Apache

    Конфигурация виртуального хоста обычно находится в файле /etc/httpd/conf/httpd.conf, а также в уникальных файлах .conf в каталоге /etc/httpd/conf.d. Хорошей практикой является создание нового файла .conf в файле /etc/httpd/conf.d, если вы добавляете несколько веб-сайтов для размещения на одном и том же веб-сервере, так как это обеспечивает чистоту конфигурации и упрощает управление. В нашем примере мы будем работать с файлами /etc/httpd/conf.d/example1.conf для веб-сайта www.example.com и /etc/httpd/conf.d/example2.conf для веб-сайта. www.example.org.

    Сначала мы начнем с примера конфигурации виртуального хоста, а затем обсудим, что на самом деле делает каждая строка. Дополнительные примеры см. в документации Apache.

    Приведенный ниже пример конфигурации виртуального хоста был сохранен в файле /etc/httpd/conf.d/example1.conf.

     <Каталог /var/www/html/example1>
        Требовать все предоставленные
    
    <Виртуальный хост *:80>
        DocumentRoot "/var/www/html/example1"
        Имя сервера www.example.com
        Псевдоним сервера example.com
        ServerAdmin [email защищен]
        ErrorLog "/var/log/httpd/error_log_example1"
        CustomLog "/var/log/httpd/access_log_example1" в сочетании
    
     

    Приведенный ниже пример конфигурации виртуального хоста был сохранен в файле /etc/httpd/conf.d/example2.conf.

     <Каталог /var/www/html/example2>
        Требовать все предоставленные
    
    <Виртуальный хост *:80>
        DocumentRoot "/var/www/html/example2"
        Имя сервера www. example.org
        Псевдоним сервера example.org
        ServerAdmin [email защищен]
        ErrorLog "/var/log/httpd/error_log_example2"
        CustomLog "/var/log/httpd/access_log_example2" в сочетании
    
     

    В приведенных выше примерах у нас есть два блока конфигурации виртуального хоста. Первый для www.example.com, а второй для www.example.org. Ниже мы объясним каждую строку для виртуального хоста example1/example.com, поскольку конфигурация между ними в основном одинакова.

    • — открывает тег каталога и используется для включения группы директив, которые применяются к указанному каталогу.
    • Требовать все разрешено — Это необходимо для предоставления доступа, без него в журналах Apache будет отображаться «authz_core: ошибка», поскольку конфигурация по умолчанию в файле /etc/http/conf/httpd.conf определяет каталог «/» с «Требовать все запрещенные ».
    • — закрывает тег каталога.
    • — этот тег виртуального хоста указывает, что конфигурация после него будет применяться к любому IP-адресу в соответствии с «*» на порту 80, вместо этого «*» может быть изменен на конкретный доступный IP-адрес. на сервере. Порт также можно изменить, если директива Listen для этого порта определена в основном файле httpd.conf.
    • DocumentRoot «/var/www/example1» — Корень документа — это каталог, в котором существует контент, который Apache должен обслуживать при посещении доменного имени, в этом случае переход на www.example.com направит нас к файлам внутри каталог /var/www/example1 на веб-сервере. Указанный каталог должен существовать и в идеале содержать содержимое.
    • ServerName www.example.com — это уникальное имя, для которого предназначен виртуальный хост, в данном случае блок конфигурации виртуального хоста предназначен для веб-сайта www.example.com.
    • ServerAlias ​​example. com — Альтернативные имена могут использоваться при сопоставлении запроса и указываются с помощью ServerAlias. Это позволяет нам предоставлять другие псевдонимы на основе имен, поскольку для каждого виртуального хоста разрешено только одно имя сервера.
    • ServerAdmin [email protected] — это адрес электронной почты, который указывается в сообщениях об ошибках, что позволяет пользователям связываться с веб-мастером веб-сервера.
    • ErrorLog «/var/log/httpd/error_log_example1» — это файл, в котором хранятся журналы ошибок, связанные с этим виртуальным хостом, которые полезны при устранении неполадок.
    • CustomLog «/var/log/httpd/access_log_example1» в сочетании — здесь хранятся журналы доступа, например, когда клиент просматривает веб-страницу, запросы на доступ будут регистрироваться здесь.
    • — это закрывающий тег блока виртуального хоста, указывающий на завершение настройки конкретного виртуального хоста.

    Если какая-либо конфигурация виртуального хоста отсутствует, вместо нее будут использоваться значения по умолчанию, указанные в основном файле /etc/httpd/conf/httpd.conf.

    Второй блок виртуального хоста в файле example2.conf почти такой же, за исключением того, что он отвечает за запросы к www.example.org и example.org, обслуживающим содержимое в /var/www/html/example2. Ошибки регистрируются в /var/log/httpd/error_log_example2, а запросы доступа регистрируются в /var/log/httpd/access_log_example2.

    Синтаксис двух наших файлов .conf можно проверить с помощью команды «apachectl configtest», как показано ниже. В этом случае корневые каталоги документов еще не созданы, поэтому мы получаем предупреждение и должны их создать.

     [[электронная почта защищена] ~]#  apachectl configtest 
    AH00112: Предупреждение: DocumentRoot [/var/www/html/example1] не существует
    AH00112: Предупреждение: DocumentRoot [/var/www/html/example2] не существует
    Синтаксис ОК
     

    Каталоги можно создать с помощью mkdir, как показано ниже.

     мкдир /var/www/html/example1
    mkdir /var/www/html/example2
     

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

     [[email protected] ~]#  cat /var/www/html/example1/index.html 
    сайт example.com
    [[электронная почта защищена] ~]#  cat /var/www/html/example2/index.html 
    веб-сайт example.org
     

    Перед тестированием нашей конфигурации виртуального хоста любые изменения в файлах конфигурации Apache, такие как изменение виртуальных хостов, потребуют перезапуска или перезагрузки службы httpd, чтобы принять изменения конфигурации. Apache можно перезагрузить, чтобы использовать изменения конфигурации с помощью «systemctl reload httpd», для получения дополнительной информации см. наше руководство по управлению службами.

    Тестирование виртуальных хостов

    После настройки виртуального хоста и перезагрузки Apache необходимо создать соответствующие записи DNS, чтобы домены разрешались на веб-сервере. В качестве альтернативы вы можете проверить, изменив файл hosts. В этом примере мы можем изменить файл /etc/hosts и добавить следующую запись.

     127.0.0.1 example.com www.example.com example.org www.example.org
     

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

     [[электронная почта защищена] ~]#  curl example.com 
    сайт example.com
    [[электронная почта защищена] ~]#  curl example.org 
    веб-сайт example.org
     

    Это подтверждает, что правильные страницы index.html в /var/www/html/example1 и /var/www/html/example2 успешно извлекаются для каждого домена, как определено в конфигурации виртуального хоста.

    Дополнительная информация

    Если вы застряли или не можете вспомнить что-либо из этого, вспомните пакет httpd-manual, который можно установить и просмотреть по адресу http://localhost/manual.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *