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


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

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

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

Ich kenne den Unterschied und den Nutzen nicht.

Thk


27
2018-01-15 00:40


Ursprung




Antworten:


Lösung ist in Apache 2.2 Dokumentation in der 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).
  • Der Charakter *, die nur in Kombination mit verwendet wird NameVirtualHost * um alle IP-Adressen zu finden; oder
  • Die Zeichenfolge _default_, die nur mit verwendet wird IP-virtuelles Hosting um unerreichte IP-Adressen zu erfassen.

Es gibt zwei Möglichkeiten, wie VirtualHosts gehandhabt werden kann: Namenbasiertes Virtualhosting und IP-basiertes Virtualhosting.

Bei benannten virtuellen Hosts haben Sie eine Liste von virtuellen Hosts, von denen jeder einen oder mehrere Domainnamen verwaltet und jeder einem Paar zugeordnet ist listening IP:port. * ist ein besonderer Wert, der meinen alle IPs auf diesem Host. Der Standard-virtualHost ist der erste deklarierte Eintrag in dieser Liste für jede angegebene Empfangsadresse.

Mit IP basierten VirtualHosts ServerName Die Direktive von VirtualHost wird nicht verwendet, die wichtige Information ist die empfangende IP (und der Port), und der Standard-VirtualHost ist der erste, der mit der IP übereinstimmt, die die eingehende Anfrage behandelt.

Also mit einer namedbasierten Virtualhosting-Konfiguration:

  • <Virtualhost *:80> with ServerName foo.com bedeutet "auf allen IPs, die auf diesem Host verwaltet werden", "auf Port 80", "wenn der Header des Anfrage-Hosts foo.com ist", verwende ich diesen virtuellen Host
  • <Virtualhost *:*> with Servername foo.com bedeutet "auf allen IPs, die auf diesem Host verwaltet werden", "auf allen Ports", "wenn der Header des Anfrage-Hosts foo.com ist", verwende ich diesen virtuellen Host
  • <Virtualhost 10.0.0.2:*> with Servername foo.com bedeutet "für die Anfrage eingehend von meiner Netzwerkschnittstelle 10.0.0.2", "an allen Ports", "wenn die Anfrage Host-Header ist foo.com" Ich werde diesen virtuellen Host verwenden
  • <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 verwende diesen virtuellen Host für die Anfrage, die über meine 10.0.0.2-Schnittstelle kommt"
  • <Virtualhost _default_:443> bedeutet "Ich werde diesen virtuellen Host für alle anderen Netzwerk-Schnittstelle auf meinem Host für die Anfrage auf Port 443 verwenden"
  • <Virtualhost _default_:*> bedeutet "Ich verwende diesen virtuellen Host für alle anderen Netzwerkschnittstellen auf meinem Host, wenn keine vorherige Regel zutrifft und wenn der Host-Header des Requests keinem named-basierten virtuellen Host entspricht"

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

Bei Verwendung von IP-basiertem virtuellem Hosting der spezielle Name _default_ kann festgelegt werden, in welchem ​​Fall dieser virtuelle Host mit einer IP-Adresse übereinstimmt, die nicht explizit in einem anderen virtuellen Host aufgeführt ist. In Abwesenheit von irgendwelchen _default_ virtueller Host Die "Haupt" -Server-Konfiguration, die aus all diesen Definitionen außerhalb eines beliebigen VirtualHost-Bereichs besteht, wird verwendet, wenn keine IP-Übereinstimmung auftritt. (Beachten Sie jedoch, dass jede IP - Adresse, die mit einer NameVirtualHost - Direktive übereinstimmt, weder die "Main" - Server - Konfiguration noch die _default_virtueller Host Weitere Informationen finden Sie in der Dokumentation zum namensbasierten virtuellen Hosting.)

Nach all diesen Dingen wird es ziemlich "klar", dass das Mischen von IP-basiertem und namensbasiertem Virtualhosting ein Chaos werden könnte. Mit Apache 2.2 wurde namesbased virtualhosting nur verwendet, wenn NameVirtualhost <something> wurde benutzt.

Aber mit dem Neuen Apache 2.4 Ausführung diese Dinge sind wirklich leichter zu verstehen, nein NameVirtualhost Erklärung. Die Anweisung NameVirtualHost hat keine Auswirkungen mehr, außer dass sie eine Warnung ausgibt. Jede Adresse / Port-Kombination in mehreren virtuellen Hosts wird implizit als name-basierter virtueller Host behandelt. Keine komplexeren Dinge, auch die Dokumentation ist jetzt einfacher:

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

Also mit Apache 2.4 ist die Antwort, das ist gleich.


33
2018-01-15 11:02





_default_ vhosts für alle Ports

Abfangen jeder Anfrage an irgendeine nicht spezifizierte IP-Adresse und Port, d. H. Eine Adresse / Port-Kombination, die nicht für irgendeinen anderen virtuellen Host verwendet wird.

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


0
2018-01-15 01:09