Namensbasierte virtuelle Server: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 89: Zeile 89:
* Um herauszufinden, ob eine bestimmte Direktive erlaubt ist, prüfen Sie den Kontext der Direktive.
* Um herauszufinden, ob eine bestimmte Direktive erlaubt ist, prüfen Sie den Kontext der Direktive.
* Konfigurationsdirektiven, die im ''Hauptserverkontext''(außerhalb eines <code><VirtualHost>-Containers</code>) gesetzt werden, werden nur dann verwendet, wenn sie nicht durch die Einstellungen des virtuellen Hosts überschrieben werden.
* Konfigurationsdirektiven, die im ''Hauptserverkontext''(außerhalb eines <code><VirtualHost>-Containers</code>) gesetzt werden, werden nur dann verwendet, wenn sie nicht durch die Einstellungen des virtuellen Hosts überschrieben werden.
[[Kategorie:Apache/HTTP/Virtuelle Server]]

Version vom 4. Mai 2024, 11:48 Uhr

Namensbasierte vs. IP-basierte virtuelle Hosts

IP-basierte virtuelle Hosts verwenden die IP-Adresse der Verbindung, um den richtigen virtuellen Host zu ermitteln.

  • Daher müssen Sie für jeden Host eine eigene IP-Adresse haben.

Beim namensbasierten virtuellen Hosting verlässt sich der Server darauf, dass der Client den Hostnamen als Teil der HTTP-Header meldet.

  • Mit dieser Technik können sich viele verschiedene Hosts dieselbe IP-Adresse teilen.

Namensbasiertes virtuelles Hosting ist in der Regel einfacher, da Sie nur Ihren DNS-Server konfigurieren müssen, um jeden Hostnamen der richtigen IP-Adresse zuzuordnen, und dann den Apache HTTP Server so konfigurieren müssen, dass er die verschiedenen Hostnamen erkennt.

  • Namensbasiertes virtuelles Hosting entlastet auch die Nachfrage nach knappen IP-Adressen.
  • Daher sollten Sie namenbasiertes virtuelles Hosting verwenden, es sei denn, Sie verwenden Geräte, die ausdrücklich IP-basiertes Hosting verlangen.
  • Historische Gründe für IP-basiertes virtuelles Hosting, die auf der Kundenunterstützung beruhen, sind für einen Allzweck-Webserver nicht mehr anwendbar.

Namensbasiertes virtuelles Hosting baut auf dem IP-basierten Algorithmus zur Auswahl virtueller Hosts auf, was bedeutet, dass die Suche nach dem richtigen Servernamen nur zwischen virtuellen Hosts erfolgt, die die beste IP-basierte Adresse haben.

Wie der Server den richtigen namensbasierten virtuellen Host auswählt

Es ist wichtig zu wissen, dass der erste Schritt bei der namensbasierten Auflösung virtueller Hosts die IP-basierte Auflösung ist.

  • Bei der namensbasierten Auflösung virtueller Hosts wird nur der am besten geeignete namensbasierte virtuelle Host ausgewählt, nachdem die Kandidaten auf die beste IP-basierte Übereinstimmung eingegrenzt wurden.
  • Die Verwendung eines Platzhalters (*) für die IP-Adresse in allen VirtualHost-Direktiven macht diese IP-basierte Zuordnung irrelevant.

Wenn eine Anfrage eintrifft, findet der Server das am besten (am spezifischsten) passende <VirtualHost>-Argument auf der Grundlage der von der Anfrage verwendeten IP-Adresse und des Ports.

  • Wenn es mehr als einen virtuellen Host gibt, der diese Kombination aus Adresse und Port enthält, vergleicht der Apache die Direktiven ServerName und ServerAlias mit dem Servernamen in der Anfrage.

Wenn Sie die Direktive ServerName bei einem namensbasierten virtuellen Host weglassen, wird der Server standardmäßig einen vollqualifizierten Domänennamen (FQDN) verwenden, der vom System-Hostnamen abgeleitet ist.

  • Dieser implizit festgelegte Servername kann zu einer kontraintuitiven Anpassung des virtuellen Hosts führen und wird daher nicht empfohlen.

Der standardmäßige namensbasierte vhost für eine Kombination aus IP und Anschluss

Wenn kein passender ServerName oder ServerAlias in der Menge der virtuellen Hosts gefunden wird, die die spezifischste übereinstimmende IP-Adress- und Port-Kombination enthält, dann wird der erste aufgelistete virtuelle Host verwendet, der damit übereinstimmt.

Verwendung von namensbasierten virtuellen Hosts

Verwandte Module Verwandte Richtlinien
  • Kernstück
  • DocumentRoot
  • ServerAlias
  • ServerName
  • <VirtualHost>

Der erste Schritt besteht darin, einen <VirtualHost>-Block für jeden verschiedenen Host zu erstellen, den Sie bedienen möchten.

  • Innerhalb jedes <VirtualHost>-Blocks benötigen Sie mindestens eine ServerName-Direktive, um zu bestimmen, welcher Host bedient wird, und eine DocumentRoot-Direktive, um anzugeben, wo im Dateisystem der Inhalt für diesen Host gespeichert ist.

Hauptwirt verschwindet

Jede Anfrage, die nicht mit einem vorhandenen <VirtualHost> übereinstimmt, wird von der globalen Serverkonfiguration behandelt, unabhängig von Hostname oder ServerName.

Wenn Sie einen namensbasierten virtuellen Host zu einem bestehenden Server hinzufügen und die Argumente des virtuellen Hosts mit bereits vorhandenen IP- und Port-Kombinationen übereinstimmen, werden die Anfragen nun von einem expliziten virtuellen Host bearbeitet.

  • In diesem Fall ist es in der Regel ratsam, einen virtuellen Standard-Hostmit einem ServerName zu erstellen, der mit dem des Basisservers übereinstimmt.
  • Neue Domänen mit derselben Schnittstelle und demselben Port, die jedoch separate Konfigurationen erfordern, können dann als nachfolgende (nicht standardmäßige) virtuelle Hosts hinzugefügt werden.

ServerName-Vererbung

Am besten ist es, in jedem namensbasierten virtuellen Host immer explizit einen ServerName anzugeben.

Wenn ein VirtualHost keinen Servernamen angibt, wird ein Servername von der Basisserverkonfiguration geerbt.

  • Wenn kein Servername global angegeben wurde, wird ein solcher beim Start durch Reverse-DNS-Auflösung der ersten Abhöradresse ermittelt.
  • In jedem Fall beeinflusst dieser geerbte Servername die Auflösung von namensbasierten virtuellen Hosts, so dass es am besten ist, in jedem namensbasierten virtuellen Host immer explizit einen Servernamen anzugeben.

Angenommen, Sie bedienen die Domain www.example.com und möchten den virtuellen Host other.example.com hinzufügen, der auf dieselbe IP-Adresse verweist.

  • Dann fügen Sie einfach Folgendes zu httpd.conf hinzu:
<VirtualHost *:80>
 # Dieser erstgenannte virtuelle Host ist auch der Standard für *:80
 ServerNamewww.example.com ServerAlias example.com DocumentRoot "/www/domain"
</VirtualHost>
<VirtualHost *:80>
 ServerName other.example.com DocumentRoot "/www/otherdomain"
</VirtualHost>

Sie können alternativ eine explizite IP-Adresse anstelle des * in den <VirtualHost>-Direktiven angeben.

  • Sie können dies zum Beispiel tun, um einige namensbasierte virtuelle Hosts auf einer IP-Adresse und entweder IP-basierte oder eine andere Gruppe namensbasierter virtueller Hosts auf einer anderen Adresse zu betreiben.

Viele Server wollen unter mehr als einem Namen erreichbar sein.

  • Dies ist mit der ServerAlias-Direktivemöglich, die innerhalb des <VirtualHost>-Abschnitts platziert wird.
  • Im ersten <VirtualHost>-Block oben zeigt die ServerAlias-Direktive beispielsweise an, dass die aufgeführten Namen andere Namen sind, unter denen die gleiche Website aufgerufen werden kann:
ServerAlias example.com *.example.com

dann werden Anfragen für alle Hosts in der Domäne example.com vom virtuellen Host www.example.com bedient.

  • Die Platzhalterzeichen * und ? können verwendet werden, um Namen abzugleichen.
  • Natürlich können Sie nicht einfach Namen erfinden und sie in ServerName oder ServerAlias einfügen.
  • Sie müssen zuerst Ihren DNS-Server richtig konfigurieren, um diese Namen einer IP-Adresse zuzuordnen, die mit Ihrem Server verbunden ist.

Namensbasierte virtuelle Hosts für den am besten übereinstimmenden Satz von <virtualhost>swerden in der Reihenfolge verarbeitet, in der sie in der Konfiguration erscheinen.

  • Der erste übereinstimmende ServerName oder ServerAlias wird verwendet, wobei es keine unterschiedliche Rangfolge für Platzhalter gibt (auch nicht für ServerName vs. ServerAlias).

Die vollständige Liste der Namen in der VirtualHost-Direktivewird genauso behandelt wie ein (nicht wildcard) ServerAlias.

Schließlich können Sie die Konfiguration der virtuellen Hosts feinabstimmen, indem Sie andere Direktiven in den <VirtualHost>-Containern platzieren.

  • Die meisten Direktiven können in diesen Containern platziert werden und ändern dann nur die Konfiguration des betreffenden virtuellen Hosts.
  • Um herauszufinden, ob eine bestimmte Direktive erlaubt ist, prüfen Sie den Kontext der Direktive.
  • Konfigurationsdirektiven, die im Hauptserverkontext(außerhalb eines <VirtualHost>-Containers) gesetzt werden, werden nur dann verwendet, wenn sie nicht durch die Einstellungen des virtuellen Hosts überschrieben werden.