Apache — директива VirtualHost

Поделись записью

Описание

Содержит директивы, которые применяются только к определенному имени хоста или IP-адресу

Синтаксис

<VirtualHost addr[:port] [addr[:port]] …> …</VirtualHost>

Использует теги открытия (начала) и закрытия (окончания)

<VirtualHost> и </ VirtualHost> используются для включения группы директив, которые будут применяться только к определенному виртуальному хосту.

Можно использовать любую директиву, разрешенную в контексте виртуального хоста. Когда сервер получает запрос на документ на конкретном виртуальном хосте, он использует директивы конфигурации, заключенные в разделе <VirtualHost>.

ADDR

Addr может быть любым из следующих, необязательно сопровождаемым двоеточием и номером порта (или *):

  • IP-адрес виртуального хоста (как в локальной сети, так и внешний);
  • Полноценное доменное имя для IP-адреса виртуального хоста (не рекомендуется);
  • Символ *(звёздочка), который действует как подстановочный знак и соответствует любому IP-адресу.
  • Строка _default_, которая является псевдонимом для *

Пример № 1

<VirtualHost 10.1.2.3:80>
ServerAdmin webmaster@host.example.com
DocumentRoot «/www/docs/host.example.com»
ServerName host.example.com
ErrorLog «logs/host.example.com-error_log»
TransferLog «logs/host.example.com-access_log»
</VirtualHost>

IPv6

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

Пример IPv6

<VirtualHost [2001:db8::a00:20ff:fea7:ccea]:80>
ServerAdmin webmaster@host.example.com
DocumentRoot «/www/docs/host.example.com»
ServerName host.example.com
ErrorLog «logs/host.example.com-error_log»
TransferLog «logs/host.example.com-access_log»
</VirtualHost>

Каждый виртуальный хост должен соответствовать другому IP-адресу, другому номеру порта или другому имени узла для сервера, в первом случае серверная машина должна быть настроена на прием IP-пакетов для нескольких адресов. (Если на компьютере нет нескольких сетевых интерфейсов, это может быть выполнено с помощью команды alias ifconfig — если ваша ОС поддерживает ее).

Использование <VirtualHost> не влияет на адреса, которые прослушивает Apache httpd. Возможно, вам потребуется убедиться, что Apache httpd прослушивает правильные адреса, используя LISTEN.

SERVERNAME должен быть указан внутри каждого блока <VirtualHost>. Если он отсутствует, то SERVERNAME будет унаследован из «основной»(main) конфигурации сервера.

Когда запрос получен, сервер сначала сопоставляет его с наилучшим соответствием <VIRTUALHOST> только на основе локального IP-адреса и комбинации портов. Несимволы имеют более высокий приоритет. Если совпадение на основе IP и порта не происходит вообще, используется «основная» конфигурация сервера.

Совпадают IP-адрес и порт виртуальных хостов

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

Нет совпадений по имени виртуального хоста

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

Безопасность

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