Назад | Перейти на главную страницу

разница между _default _: * и *: * в контексте VirtualHost

Я хочу знать разницу между "дефолт: * " и "*: *" в контексте VirtualHost.

<VirtualHost _default_:*>
  #...
  ServerName host.example.com
  #...
</VirtualHost>

<VirtualHost *:*>
  #...
  ServerName host.example.com
  #...
</VirtualHost>

Я не знаю разницы и цели использования.

Thk

Решение находится в документации Apache 2.2. в директиве Virtualhost:

Синтаксис: ... (...) Адрес может быть:

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

Существует два способа обработки виртуальных хостов: виртуальный хостинг на основе имени и виртуальный хостинг на основе IP.

С именованными виртуальными хостами у вас есть список виртуальных хостов, каждый из которых управляет одним или несколькими доменными именами, и каждый связан с парой listening IP:port. * это специальное значение, которое означает все IP на этом хосте. VirtualHost по умолчанию является первым объявленным в этом списке для каждого заданного адреса прослушивания.

С VirtualHosts на основе IP ServerName директива VirtualHost не используется, важная информация - это IP-адрес прослушивания (и порт), а VirtualHost по умолчанию является первым, совпадающим с IP-адресом, обрабатывающим входящий запрос.

Итак, с конфигурацией виртуального хостинга на основе имени:

  • <Virtualhost *:80> with ServerName foo.com означает «на всех IP-адресах, управляемых на этом хосте», «на порту 80», «если заголовок хоста запроса - foo.com» Я буду использовать этот виртуальный хост
  • <Virtualhost *:*> with Servername foo.com означает «на всех IP-адресах, управляемых на этом хосте», «на всех портах», «если заголовок хоста запроса - foo.com» Я буду использовать этот виртуальный хост
  • <Virtualhost 10.0.0.2:*> with Servername foo.com означает «для запроса, входящего из моего сетевого интерфейса 10.0.0.2», «на всех портах», «если заголовок хоста запроса - foo.com» Я буду использовать этот виртуальный хост
  • <Virtualhost _default_:*> with Servername foo.com : не следует использовать с виртуальным хостингом на основе имени

И на виртуальном хостинге на основе IP:

  • <Virtualhost 10.0.0.2:*> означает «Я буду использовать этот виртуальный хост для запроса, приходящего на мой интерфейс 10.0.0.2»
  • <Virtualhost _default_:443> означает: «Я буду использовать этот виртуальный хост для всех остальных сетевых интерфейсов на моем хосте для запросов, поступающих на порт 443»
  • <Virtualhost _default_:*> означает: «Я буду использовать этот виртуальный хост для всех других сетевых интерфейсов на моем хосте, если он не соответствует предыдущему правилу и если заголовок хоста запроса не соответствует именованному виртуальному хосту»

Итак, все дело в определении универсального виртуального хоста. Документация добавляет:

При использовании виртуального хостинга на основе IP специальное имя _default_ можно указать, и в этом случае этот виртуальный хост будет соответствовать любому IP-адресу, который явно не указан в другом виртуальном хосте. В отсутствие каких-либо _default_ виртуальный хост - конфигурация «основного» сервера, состоящая из всех этих определений вне любого раздела VirtualHost, используется, когда не происходит совпадения IP. (Но обратите внимание, что любой IP-адрес, соответствующий директиве NameVirtualHost, не будет использовать ни "основной" сервер, ни _default_ виртуальный хост. Дополнительную информацию см. В документации по виртуальному хостингу на основе имен.)

Таким образом, после всех этих вещей становится совершенно «ясно», что смешивание виртуального хостинга на основе IP и имени может стать беспорядком. В Apache 2.2 виртуальный хостинг на основе имен использовался, только если NameVirtualhost <something> использовался.

Но с новым Apache 2.4 версия эти вещи действительно легче понять, нет NameVirtualhost декларация. Директива NameVirtualHost больше не имеет никакого эффекта, кроме выдачи предупреждения. Любая комбинация адреса / порта, появляющаяся на нескольких виртуальных хостах, неявно рассматривается как виртуальный хост на основе имени.. Никаких сложностей, даже документация стала проще:

  • Символ *, который действует как подстановочный знак и соответствует любому IP-адресу.
  • Строка _default_, который является псевдонимом для *

Итак, с apache 2.4 ответ таков: это то же самое.

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

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

http://httpd.apache.org/docs/2.2/vhosts/examples.html#default