Unterschied zwischen _default_:* und *:* im VirtualHost-Kontext

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 Verwendungszweck nicht.

Danke

Antwort1

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

Syntax: ... (...) Adresse kann sein:

  • Die IP-Adresse des virtuellen Hosts;
  • Ein vollqualifizierter Domänenname für die IP-Adresse des virtuellen Hosts (nicht empfohlen);
  • Der Charakter *, das nur in Kombination mit verwendet wirdNameVirtualHost* um alle IP-Adressen abzugleichen; oder
  • Die Zeichenfolge _default_, das nur verwendet wird mitVirtuelles IP-Hostingum nicht übereinstimmende IP-Adressen abzufangen.

Es gibt zwei Möglichkeiten zum Umgang mit virtuellen Hosts: namensbasiertes Virtualhosting und IP-basiertes Virtualhosting.

Mit benannten 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 bedeutetalle IPs auf diesem Host. Der Standard-VirtualHost ist der erste in dieser Liste deklarierte für jede angegebene Abhöradresse.

Bei IP-basierten VirtualHosts ServerNamewird die Direktive des VirtualHosts nicht verwendet. Die wichtige Information ist die abhörende IP (und der Port). Der Standard-VirtualHost ist der erste, der mit der IP übereinstimmt, die die eingehende Anfrage bearbeitet.

Also mit einer benannten Virtualhosting-Konfiguration:

  • <Virtualhost *:80> with ServerName foo.combedeutet "auf allen IPs, die auf diesem Host verwaltet werden", "auf Port 80", "wenn der Anforderungshostheader foo.com ist" Ich werde diesen virtuellen Host verwenden
  • <Virtualhost *:*> with Servername foo.combedeutet "auf allen IPs, die auf diesem Host verwaltet werden", "auf allen Ports", "wenn der Anforderungshostheader foo.com ist" Ich werde diesen virtuellen Host verwenden
  • <Virtualhost 10.0.0.2:*> with Servername foo.combedeutet "für Anfragen, die von meiner Netzwerkschnittstelle 10.0.0.2 eingehen", "auf allen Ports", "wenn der Header des Anfragehosts foo.com ist" Ich werde diesen virtuellen Host verwenden
  • <Virtualhost _default_:*> with Servername foo.com: sollte nicht mit namenbasiertem 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 über meine 10.0.0.2-Schnittstelle eingehen“
  • <Virtualhost _default_:443>bedeutet „Ich werde diesen virtuellen Host für alle anderen Netzwerkschnittstellen auf meinem Host für Anfragen verwenden, die über Port 443 eingehen“
  • <Virtualhost _default_:*>bedeutet: „Ich werde diesen virtuellen Host für alle anderen Netzwerkschnittstellen auf meinem Host verwenden, sofern er keiner vorherigen Regel entspricht und der Hostheader der Anforderung keinem benannten virtuellen Host entspricht.“

Es geht also darum, einen Catch-All-Virtualhost zu definieren. In der Dokumentation heißt es:

Bei Verwendung von IP-basiertem virtuellem Hosting _default_kann der spezielle Name angegeben werden. In diesem Fall wird dieser virtuelle Host mit jeder IP-Adresse übereinstimmen, die nicht explizit in einem anderen virtuellen Host aufgeführt ist. Wenn kein _default_virtueller Host vorhanden ist, wird die „Haupt“-Serverkonfiguration verwendet, die aus allen Definitionen außerhalb eines VirtualHost-Abschnitts besteht, wenn keine IP-Übereinstimmung auftritt. (Beachten Sie jedoch, dass jede IP-Adresse, die einer NameVirtualHost-Anweisung entspricht, weder die „Haupt“-Serverkonfiguration noch den _default_virtuellen Host verwendet. Weitere Einzelheiten finden Sie in der Dokumentation zum namenbasierten virtuellen Hosting.)

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

Abermit dem neuenApache 2.4AusführungDiese Dinge sind wirklich einfacher zu verstehen, keine NameVirtualhostErklärung.Die Anweisung NameVirtualHost hat keine Wirkung mehr, außer dass sie eine Warnung ausgibt. Jede Adress-/Port-Kombination, die in mehreren virtuellen Hosts vorkommt, wird implizit als namensbasierter virtueller Host behandelt.. Keine komplizierten Gedanken mehr, auch die Dokumentation ist jetzt einfacher:

  • Das Zeichen *, das als Platzhalter fungiert und mit jeder IP-Adresse übereinstimmt.
  • Die Zeichenfolge _default_, die ein Alias ​​für * ist

Mit Apache 2.4 lautet die Antwort:das ist gleich.

Antwort2

_default_vhosts für alle Ports

Abfangen aller Anfragen an nicht angegebene IP-Adressen und Ports, also an Adress-/Port-Kombinationen, die für keinen anderen virtuellen Host verwendet werden.

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

verwandte Informationen