różnica między _default _: * i *: * w kontekście VirtualHost

35

Chcę poznać różnicę między default : *” a „*: *” w kontekście VirtualHost.

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

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

Nie znam różnicy i porpouse użytkowania.

Dziękuję

Luigi Giuseppe
źródło

Odpowiedzi:

40

Rozwiązanie dotyczy dokumentacji Apache 2.2 dotyczącej dyrektywy Virtualhost :

Składnia: ... (...) Addr może być:

  • Adres IP wirtualnego hosta;
  • W pełni kwalifikowana nazwa domeny dla adresu IP hosta wirtualnego (niezalecane);
  • Znak * , który jest używany tylko w połączeniu z NameVirtualHost *, aby dopasować wszystkie adresy IP; lub
  • Ciąg _default_ , który jest używany tylko z wirtualnym hostingiem IP w celu przechwytywania niedopasowanych adresów IP.

Istnieją dwa sposoby obsługi Virtualhostów: Virtualhosting oparty na nazwie i Virtualhosting oparty na IP.

W przypadku wirtualnych hostów opartych na nazwach masz listę wirtualnych hostów, z których każda zarządza jedną lub kilkoma nazwami domen i każda jest powiązana z kilkoma listening IP:port. *jest specjalną wartością, która oznacza wszystkie adresy IP na tym hoście . Domyślny virtualHost jest pierwszym zadeklarowanym na tej liście dla każdego podanego adresu nasłuchiwania.

W przypadku VirtualHost opartych na IP ServerNamedyrektywa VirtualHost nie jest używana, ważną informacją jest nasłuchujący adres IP (i port), a domyślny VirtualHost jest pierwszym pasującym do adresu IP obsługującego przychodzące żądanie.

Tak więc w przypadku wirtualnego hostingu opartego na nazwie:

  • <Virtualhost *:80> with ServerName foo.com oznacza „na wszystkich adresach IP zarządzanych na tym hoście”, „na porcie 80”, „jeśli nagłówek hosta żądania to foo.com” Użyję tego wirtualnego hosta
  • <Virtualhost *:*> with Servername foo.com oznacza „na wszystkich adresach IP zarządzanych na tym hoście”, „na wszystkich portach”, „jeśli nagłówek hosta żądania to foo.com” Użyję tego wirtualnego hosta
  • <Virtualhost 10.0.0.2:*> with Servername foo.com oznacza „dla żądania przychodzącego z mojego interfejsu sieciowego 10.0.0.2”, „na wszystkich portach”, „jeśli nagłówek hosta żądania to foo.com” Użyję tego wirtualnego hosta
  • <Virtualhost _default_:*> with Servername foo.com : nie należy używać z wirtualnym hostingiem opartym na nazwie

I na Virtualhosting oparty na IP:

  • <Virtualhost 10.0.0.2:*> oznacza „Użyję tego wirtualnego hosta do żądania przychodzącego na moim interfejsie 10.0.0.2”
  • <Virtualhost _default_:443> oznacza „Będę używać tego wirtualnego hosta dla wszystkich innych interfejsów sieciowych na moim hoście dla żądania przychodzącego na porcie 443”
  • <Virtualhost _default_:*> oznacza „Użyję tego wirtualnego hosta dla wszystkich innych interfejsów sieciowych na moim hoście, jeśli nie jest zgodny z poprzednią regułą i jeśli nagłówek hosta żądania nie jest zgodny z nazwanym wirtualnym hostem”

Chodzi więc o zdefiniowanie wirtualnego hosta typu catch-all. Dokumentacja dodaje:

Podczas korzystania z hostingu wirtualnego opartego na protokole IP _default_można określić specjalną nazwę, w którym to przypadku ten wirtualny host będzie pasował do dowolnego adresu IP, który nie jest wyraźnie wymieniony na innym hoście wirtualnym. W przypadku braku _default_wirtualnego hosta konfiguracja serwera „głównego”, obejmująca wszystkie te definicje poza sekcją VirtualHost, jest używana, gdy nie występuje dopasowanie IP. (Należy jednak pamiętać, że każdy adres IP zgodny z dyrektywą NameVirtualHost nie będzie korzystał ani z konfiguracji serwera „głównego”, ani z _default_hosta wirtualnego. Więcej szczegółowych informacji można znaleźć w dokumentacji hostingu wirtualnego opartej na nazwie).

Po tych wszystkich rzeczach staje się zupełnie „jasne”, że mieszanie wirtualnego hostingu opartego na IP i nazwach może stać się bałaganem. W Apache 2.2 wirtualny hosting oparty na nazwie był używany tylko wtedy, gdy NameVirtualhost <something>był używany.

Ale dzięki nowej wersji Apache 2.4 te rzeczy są naprawdę łatwiejsze do zrozumienia, bez NameVirtualhostdeklaracji. Dyrektywa NameVirtualHost nie ma już żadnego wpływu poza emisją ostrzeżenia. Każda kombinacja adresu / portu pojawiająca się na wielu hostach wirtualnych jest domyślnie traktowana jako host wirtualny oparty na nazwie . Nigdy więcej skomplikowanych spraw, nawet dokumentacja jest teraz prostsza:

  • Znak *, który działa jak symbol wieloznaczny i pasuje do dowolnego adresu IP.
  • Ciąg _default_, który jest aliasem dla *

W przypadku Apache 2.4 odpowiedź brzmi: to samo .

regilero
źródło
0

_default_ vhosty dla wszystkich portów

Przechwytywanie każdego żądania na dowolny nieokreślony adres IP i port, tj. Kombinację adresu / portu, która nie jest używana dla żadnego innego wirtualnego hosta.

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

Jacek Lakomiec
źródło