Unterschied zwischen _default _: * und *: * im VirtualHost-Kontext


35

Ich möchte den Unterschied zwischen " default : *" und "*: *" im VirtualHost-Kontext kennen.

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

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

Ich kenne den Unterschied und den Verwendungszweck nicht.

Thk

Antworten:


40

Die Lösung befindet sich in der Apache 2.2-Dokumentation zur Virtualhost-Direktive :

Syntax: ... (...) Addr kann sein:

  • Die IP-Adresse des virtuellen Hosts.
  • Ein vollständig qualifizierter Domänenname für die IP-Adresse des virtuellen Hosts (nicht empfohlen).
  • Das Zeichen * , das nur in Kombination mit NameVirtualHost * verwendet wird, um allen IP-Adressen zu entsprechen. oder
  • Die Zeichenfolge _default_ , die nur beim virtuellen IP-Hosting zum Abrufen nicht übereinstimmender IP-Adressen verwendet wird.

Es gibt zwei Möglichkeiten, mit Virtualhosts umzugehen: Namensbasiertes Virtualhosting und IP-basiertes Virtualhosting.

Mit namensbasierten virtuellen Hosts haben Sie eine Liste von virtuellen Hosts, von denen jeder einen oder mehrere Domänennamen verwaltet und jedem ein Paar zugeordnet ist listening IP:port. *ist ein spezieller Wert, der alle IPs auf diesem Host bedeutet . Der Standard-VirtualHost ist der erste deklarierte in dieser Liste für jede angegebene Abhöradresse.

Bei IP-basierten VirtualHosts wird die ServerNameAnweisung des VirtualHosts nicht verwendet. Die wichtige Information ist die empfangsbereite IP (und der Port). Der Standard-VirtualHost ist der erste, der mit der IP übereinstimmt, die die eingehende Anforderung verarbeitet.

Also mit einer benannten basierten virtualhosting Konfiguration:

  • <Virtualhost *:80> with ServerName foo.com bedeutet "auf allen auf diesem Host verwalteten IPs", "auf Port 80", "wenn der Header des Anforderungshosts foo.com lautet" Ich verwende diesen virtuellen Host
  • <Virtualhost *:*> with Servername foo.com bedeutet "auf allen auf diesem Host verwalteten IPs", "auf allen Ports", "wenn der Header des Anforderungshosts foo.com lautet" Ich verwende diesen virtuellen Host
  • <Virtualhost 10.0.0.2:*> with Servername foo.com bedeutet "für von meiner Netzwerkschnittstelle 10.0.0.2 eingehende Anforderungen", "an allen Ports", "wenn der Anforderungshostheader foo.com lautet" Ich verwende diesen virtuellen Host
  • <Virtualhost _default_:*> with Servername foo.com : sollte nicht mit namensbasiertem Virtualhosting verwendet werden

Und auf einem IP-basierten Virtualhosting:

  • <Virtualhost 10.0.0.2:*> bedeutet "Ich werde diesen virtuellen Host für Anfragen verwenden, die auf meiner 10.0.0.2-Schnittstelle eingehen".
  • <Virtualhost _default_:443> bedeutet "Ich werde diesen virtuellen Host für alle anderen Netzwerkschnittstellen auf meinem Host verwenden, damit die Anforderung über Port 443 eingeht."
  • <Virtualhost _default_:*> bedeutet "Ich verwende diesen virtuellen Host für alle anderen Netzwerkschnittstellen auf meinem Host, wenn er nicht mit einer vorherigen Regel übereinstimmt und wenn der Header des Anforderungshosts nicht mit einem namensbasierten virtuellen Host übereinstimmt."

Es geht also darum, einen Allround-Virtualhost zu definieren. Dokumentation fügt hinzu:

Bei Verwendung von IP-basiertem virtuellem Host kann der spezielle Name _default_angegeben werden. In diesem Fall stimmt dieser virtuelle Host mit jeder IP-Adresse überein, die nicht explizit in einem anderen virtuellen Host aufgeführt ist. In Abwesenheit eines _default_virtuellen Host der „main“ Serverkonfiguration, bestehend aus allen Definitionen außerhalb des Virtual Abschnitts wird verwendet, wenn keine IP-Übereinstimmung auftritt. (Beachten Sie jedoch, dass für jede IP-Adresse, die einer NameVirtualHost-Direktive entspricht, weder die "Haupt" -Serverkonfiguration noch der _default_virtuelle Host verwendet wird. Weitere Informationen finden Sie in der Dokumentation zum namensbasierten virtuellen Hosting.)

Nach all diesen Dingen wird klar, dass das Mischen von IP-basiertem und namenbasiertem Virtualhosting zu einem Chaos werden kann. Mit Apache 2.2 wurde namensbasiertes Virtualhosting nur verwendet, wenn NameVirtualhost <something>es verwendet wurde.

Aber mit der neuen Apache 2.4- Version sind diese Dinge wirklich einfacher zu verstehen, keine NameVirtualhostErklärung. Die Direktive NameVirtualHost hat keine Wirkung mehr, außer eine Warnung auszugeben. Jede Kombination aus Adresse und Port, die auf mehreren virtuellen Hosts angezeigt wird, wird implizit als namensbasierter virtueller Host behandelt . Keine komplizierten Überlegungen mehr, auch die Dokumentation ist jetzt einfacher:

  • Das Zeichen *, das als Platzhalter fungiert und mit einer beliebigen IP-Adresse übereinstimmt.
  • Der String _default_, der ein Alias ​​für * ist

Also mit Apache 2.4 ist die Antwort, es ist das gleiche .


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.