Namensbasierte virtuelle Server
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.
Interne Verarbeitung
- 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
undServerAlias
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 |
---|---|
|
|
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 eineServerName-Direktive
, um zu bestimmen, welcher Host bedient wird, und eineDocumentRoot-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-Direktive
möglich, die innerhalb des<VirtualHost>-Abschnitts
platziert wird. - Im ersten
<VirtualHost>-Block
oben zeigt dieServerAlias-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
oderServerAlias
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>s
werden in der Reihenfolge verarbeitet, in der sie in der Konfiguration erscheinen.
- Der erste übereinstimmende
ServerName
oderServerAlias
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-Direktive
wird 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.