різниця між _default _: * та *: * у VirtualHost Context


35

Я хочу знати різницю між " за замовчуванням : *" і "*: *" у VirtualHost Context.

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

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

Я не знаю різниці та переваги використання.

Думаю

Відповіді:


40

Рішення знаходиться в документації Apache 2.2 щодо директиви Virtualhost :

Синтаксис: ... (...) Addr може бути:

  • IP-адреса віртуального хоста;
  • Повноцінне доменне ім’я для IP-адреси віртуального хоста (не рекомендується);
  • Символ * , який використовується лише в поєднанні з NameVirtualHost *, щоб відповідати всім IP-адресам; або
  • Рядок _default_ , який використовується лише з віртуальним хостингом IP для лову незрівнянних IP-адрес.

Існує два способи поводження з Virtualhosts, Virtualhosting на основі імені та Virtualhosting на основі IP.

З іменованими віртуальними хостами у вас є список віртуальних хостів, кожен з яких керує одним або декількома доменними іменами, а кожен пов'язаний з парою listening IP:port. *це особливе значення, яке означає всі IP-адреси цього хоста . За замовчуванням virtualHost є першим оголошеним у цьому списку для кожної заданої адреси прослуховування.

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

Отже, з іменованою конфігурацією віртуального хостингу:

  • <Virtualhost *:80> with ServerName foo.com означає "на всіх IP-адресах, якими керує цей хост", "на порту 80", "якщо заголовок хоста запиту foo.com" я буду використовувати цей virtualhost
  • <Virtualhost *:*> with Servername foo.com означає "на всіх IP-адресах, якими керує цей хост", "на всіх портах", "якщо заголовок хоста запиту foo.com" я буду використовувати цей virtualhost
  • <Virtualhost 10.0.0.2:*> with Servername foo.com означає "для запиту, що надходить з мого мережевого інтерфейсу 10.0.0.2", "на всі порти", "якщо заголовок хоста запиту foo.com" я буду використовувати цей virtualhost
  • <Virtualhost _default_:*> with Servername foo.com : не слід використовувати з віртуальним хостингом на основі імен

А на Virtualhosting на основі IP:

  • <Virtualhost 10.0.0.2:*> означає "Я буду використовувати цей virtualhost для запиту, що надходить на мій інтерфейс 10.0.0.2"
  • <Virtualhost _default_:443> означає "Я буду використовувати цей virtualhost для всіх інших мережевих інтерфейсів мого хоста для запиту, що надходить на порт 443"
  • <Virtualhost _default_:*> означає "Я буду використовувати цей virtualhost для всіх інших мережевих інтерфейсів мого хоста, якщо він не збігається з попереднім правилом, і якщо заголовок хоста запиту не відповідає іменованому virtualhost"

Тож справа в тому, щоб визначити виртуальний хост Virtualhost. Документація додає:

Під час використання віртуального хостингу на основі 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 відповідь - це те саме .


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.