|
|
| Zeile 16: |
Zeile 16: |
| </noinclude> | | </noinclude> |
|
| |
|
| = TMP =
| |
| == Namensbasierter Websites ==
| |
| ; Betrieb mehrerer namensbasierter Websites unter einer einzigen IP-Adresse
| |
| Ihr Server hat mehrere Hostnamen, die zu einer einzigen Adresse aufgelöst werden, und Sie möchten für www.example.comund www.example.org unterschiedlich reagieren
| |
|
| |
| ; Hinweis
| |
| :Das Erstellen von virtuellen Hostkonfigurationen auf Ihrem Apache-Server bewirkt nicht auf magische Weise, dass DNS-Einträge für diese Hostnamen erstellt werden.
| |
| * Sie müssen die Namen im DNS haben, die zu Ihrer IP-Adresse aufgelöst werden, oder niemand wird Ihre Website sehen können.
| |
| * Sie können Einträge in Ihrer hosts-Datei für lokale Tests vornehmen, aber das funktioniert nur von dem Rechner aus, der diese hosts-Einträge hat.
| |
|
| |
| # Sicherstellen, dass Apache auf Port 80 lauscht
| |
| <syntaxhighlight lang="apache" line copy>
| |
| Listen 80
| |
| <VirtualHost *:80>
| |
| DocumentRoot "/www/example1"
| |
| ServerName www.example.com
| |
| # Andere Direktiven hier
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| <syntaxhighlight lang="apache" line copy>
| |
| <VirtualHost *:80>
| |
| DocumentRoot "/www/example2"
| |
| ServerName www.example.org
| |
| # Andere Direktiven hier
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| Die Sternchen passen zu allen Adressen, so dass der Hauptserver keine Anfragen bedient.
| |
| * Da der virtuelle Host mit ServerName www.example.com in der Konfigurationsdatei an erster Stelle steht, hat er die höchste Priorität und kann als Standard- oder Primärserver angesehen werden.
| |
| * Das heißt, wenn eine Anfrage eingeht, die nicht mit einer der angegebenen ServerName-Direktiven übereinstimmt, wird sie von diesem ersten <VirtualHost> bedient.
| |
|
| |
| Die obige Konfiguration sollten Sie in fast allen Fällen verwenden, in denen ein virtuelles Hosting auf Namen basiert.
| |
| * Die einzige Sache, für die diese Konfiguration nicht funktioniert, ist, wenn Sie unterschiedliche Inhalte auf der Grundlage unterschiedlicher IP-Adressen oder Ports bereitstellen.
| |
|
| |
| ; Hinweis
| |
| Sie können * durch eine bestimmte IP-Adresse auf dem System ersetzen.
| |
| * Solche virtuellen Hosts werden nur für HTTP-Anfragen verwendet, die bei einer Verbindung mit der angegebenen IP-Adresse eingehen.
| |
|
| |
| Es ist jedoch auch nützlich, * auf Systemen zu verwenden, bei denen die IP-Adresse nicht vorhersehbar ist - zum Beispiel, wenn Sie eine dynamische IP-Adresse bei Ihrem ISP haben und eine Art dynamische DNS-Lösung verwenden.
| |
| * Da * mit jeder IP-Adresse übereinstimmt, würde diese Konfiguration ohne Änderungen funktionieren, wenn sich Ihre IP-Adresse ändert.
| |
|
| |
| === Namensbasierte Hosts auf mehr als einer IP-Adresse ===
| |
| ;Hinweis
| |
| : Jede der hier beschriebenen Techniken kann auf eine beliebige Anzahl von IP-Adressen ausgedehnt werden.
| |
|
| |
| Der Server hat zwei IP-Adressen
| |
| * Auf der einen(172.20.30.40) wird der "Hauptserver" server.example.com betrieben und auf der anderen (172.20.30.50) werden zwei oder mehr virtuelle Hosts betrieben.
| |
|
| |
| <syntaxhighlight lang="apache" line copy>
| |
| Listen 80
| |
|
| |
| # Dies ist der "Haupt"-Server, der auf 172.20.30.40 läuft
| |
| ServerName server.example.com
| |
| DocumentRoot "/www/mainserver"
| |
|
| |
| <VirtualHost 172.20.30.50>
| |
| DocumentRoot "/www/example1"
| |
| ServerName www.example.com
| |
| # Andere Direktiven hier ...
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.50>
| |
| DocumentRoot "/www/example2"
| |
| ServerNamewww.example.org
| |
| # Andere Direktiven hier ...
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| Jede Anfrage an eine andere Adresse als 172.20.30.50 wird vom Hauptserver zugestellt.
| |
| * Eine Anfrage an 172.20.30.50 mit einem unbekannten Hostnamen oder ohne Host: Header wird von www.example.com zugestellt.
| |
| * Bereitstellung desselben Inhalts auf verschiedenen IP-Adressen (z. .B. einer internen und einer externen Adresse).
| |
|
| |
| ; Der Server-Rechner hat zwei IP-Adressen(192.168.1.1und 172.20.30.40)
| |
| * Der Rechner befindet sich zwischen einem internen (Intranet) und einem externen (Internet) Netz.
| |
| * Außerhalb des Netzes wird der Name server.example.com zur externen Adresse(172.20.30.40) aufgelöst, aber innerhalb des Netzes wird derselbe Name zur internen Adresse (192.168.1.1) aufgelöst.
| |
|
| |
| Mit nur einem <VirtualHost>-Abschnitt kann der Server dazu gebracht werden, auf interne und externe Anfragen mit demselben Inhalt zu antworten.
| |
| <syntaxhighlight lang="apache" line copy>
| |
| <VirtualHost 192.168.1.1 172.20.30.40>
| |
| DocumentRoot "/www/server1"
| |
| ServerName server.example.com
| |
| ServerAlias server
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| Jetzt werden Anfragen aus beiden Netzen von demselben <VirtualHost> bedient.
| |
|
| |
| ; Anmerkung
| |
| Im internen Netzwerk kann man statt des voll qualifizierten Hostnamens server.example.com einfach den Nameserver verwenden.
| |
|
| |
| Beachten Sie auch, dass Sie im obigen Beispiel die Liste der IP-Adressen durch * ersetzen können, was dazu führt, dass der Server auf alle Adressen gleich antwortet.
| |
|
| |
| === Verschiedene Websites auf verschiedenen Ports ===
| |
|
| |
| Sie haben mehrere Domänen, die auf dieselbe IP-Adresse verweisen, und möchten auch mehrere Ports bedienen.
| |
| * Das nachstehende Beispiel zeigt, dass die Namenszuordnung erfolgt, nachdem die am besten passende Kombination aus IP-Adresse und Port ermittelt wurde.
| |
| <syntaxhighlight lang="apache" line copy>
| |
| Listen 80
| |
| Listen 8080
| |
|
| |
| <VirtualHost 172.20.30.40:80>
| |
| ServerName www.example.com
| |
| DocumentRoot "/www/domain-80"
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.40:8080>
| |
| ServerName www.example.com
| |
| DocumentRoot "/www/domain-8080"
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.40:80>
| |
| ServerName www.example.org
| |
| DocumentRoot "/www/otherdomain-80"
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.40:8080>
| |
| ServerName www.example.org
| |
| DocumentRoot "/www/otherdomain-8080"
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| == IP-basiertes virtuelles Hosting ==
| |
|
| |
| Der Server hat zwei IP-Adressen(172.20.30.40 und 172.20.30.50), die zu den Namen www.example.com bzw. www.example.orgaufgelöst werden
| |
| <syntaxhighlight lang="apache" line copy>
| |
| Listen 80
| |
|
| |
| <VirtualHost 172.20.30.40>
| |
| DocumentRoot "/www/example1"
| |
| ServerName www.example.com</VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.50>
| |
| DocumentRoot "/www/example2"
| |
| ServerName www.example.org</VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| Anfragen an eine Adresse, die nicht in einer der <VirtualHost>-Direktiven angegeben ist (beispielsweise localhost), werden an den Hauptserver weitergeleitet, sofern ein solcher vorhanden ist.
| |
|
| |
| === Gemischte port- und ip-basierte virtuelle Hosts ===
| |
| Der Server-Rechner hat zwei IP-Adressen(172.20.30.40 und 172.20.30.50), die zu den Namen www.example.com bzw. www.example.org aufgelöst werden.
| |
| * In beiden Fällen wollen wir Hosts auf den Ports 80 und 8080 ausführen.
| |
|
| |
| <syntaxhighlight lang="apache" line copy>
| |
| Listen 172.20.30.40:80
| |
| Listen 172.20.30.40:8080
| |
| Listen 172.20.30.50:80
| |
| Listen 172.20.30.50:8080
| |
|
| |
| <VirtualHost 172.20.30.40:80>
| |
| DocumentRoot "/www/example1-80"
| |
| ServerName www.example.com
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.40:8080>
| |
| DocumentRoot "/www/example1-8080"
| |
| ServerName www.example.com
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.50:80>
| |
| DocumentRoot "/www/example2-80"
| |
| ServerName www.example.org
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.50:8080>
| |
| DocumentRoot "/www/example2-8080"
| |
| ServerName www.example.org
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| == Gemischte namensbasierte und IP-basierte vhosts ==
| |
| Jede Adresse, die im Argument eines virtuellen Hosts genannt wird und nie in einem anderen virtuellen Host auftaucht, ist ein rein IP-basierter virtueller Host.
| |
| <syntaxhighlight lang="apache" line copy>
| |
| Listen 80
| |
| <VirtualHost 172.20.30.40>
| |
| DocumentRoot "/www/example1"
| |
| ServerName www.example.com
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.40>
| |
| DocumentRoot "/www/example2"
| |
| ServerName www.example.org
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.40>
| |
| DocumentRoot "/www/example3"
| |
| ServerName www.example.net
| |
| </VirtualHost>
| |
|
| |
| # IP-basiert
| |
| <VirtualHost 172.20.30.50>
| |
| DocumentRoot "/www/example4"
| |
| ServerName www.example.edu
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.60>
| |
| DocumentRoot "/www/example5"
| |
| Servername www.example.gov
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| == Gemeinsame Verwendung von Virtual_host und mod_proxy ==
| |
| Das folgende Beispiel ermöglicht es einem Front-End-Rechner, einen virtuellen Host an einen Server weiterzuleiten, der auf einem anderen Rechner läuft.
| |
| * Im Beispiel wird ein virtueller Host mit demselben Namen auf einem Rechner unter 192.168.111.2 konfiguriert.
| |
| * Die Anweisung ProxyPreserveHost On wird verwendet, damit der gewünschte Hostname durchgereicht wird, falls wir mehrere Hostnamen an einen einzelnen Rechner weiterleiten.
| |
| <syntaxhighlight lang="apache" line copy>
| |
| <VirtualHost *:*>
| |
| ProxyPreserveHost On
| |
| ProxyPass "/" "https://192.168.111.2/"
| |
| ProxyPassReverse "/" "https://192.168.111.2/"
| |
| ServerName hostname.example.com
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| == Verwendung von _Standard_vhosts ==
| |
| _Standard_ vhosts für alle Ports
| |
|
| |
| Abfangen jeder Anfrage an eine nicht spezifizierte IP-Adresse und einen nicht spezifizierten Port, d. h. eine Kombination aus Adresse und Port, die für keinen anderen virtuellen Host verwendet wird.
| |
| <syntaxhighlight lang="apache" line copy>
| |
| <VirtualHost _default_:*>
| |
| DocumentRoot "/www/default"
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| Die Verwendung eines solchen Standard-Vhosts mit einem Wildcard-Port verhindert effektiv, dass eine Anfrage an den Hauptserver geht.
| |
|
| |
| Ein Standard-Vhost bedient niemals eine Anfrage, die an eine Adresse/Port gesendet wurde, die für namensbasierte Vhosts verwendet wird.
| |
| * Wenn die Anfrage einen unbekannten oder keinen Host:-Header enthielt, wird sie immer vom primären namensbasierten vhost bedient (der vhost für diese Adresse/Port, der in der Konfigurationsdatei an erster Stelle steht).
| |
|
| |
| Sie können AliasMatch oder RewriteRule verwenden, um jede Anfrage auf eine einzelne Informationsseite (oder ein Skript) umzuschreiben.
| |
|
| |
| === _Standard_ vhosts für verschiedene Ports ===
| |
|
| |
| Wie Setup 1, aber der Server lauscht auf mehreren Ports und wir wollen einen zweiten _Standard_ vhost für Port 80 verwenden.
| |
| <syntaxhighlight lang="apache" line copy>
| |
| <VirtualHost _default_:80>
| |
| DocumentRoot "/www/default80"
| |
| #...
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| <syntaxhighlight lang="apache" line copy>
| |
| <VirtualHost _default_:*>
| |
| DocumentRoot "/www/default"
| |
| #...
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| Der Standard-Vhost für Port 80 (der vor jedem Standard-Vhost mit einem Wildcard-Port stehen muss ) fängt alle Anfragen ab, die an eine nicht spezifizierte IP-Adresse gesendet wurden.
| |
| * Der Hauptserver wird nie zur Bearbeitung einer Anfrage verwendet.
| |
|
| |
| === _Standard_ vhosts für einen Port ===
| |
|
| |
| Wir möchten einen Standard-Vhost für Port 80 haben, aber keine anderen Standard-Vhosts.
| |
| <syntaxhighlight lang="apache" line copy>
| |
| <VirtualHost _default_:80>
| |
| DocumentRoot "/www/default"
| |
| ...
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| Eine Anfrage an eine nicht spezifizierte Adresse an Port 80 wird vom Standard-Vhost bedient.
| |
| * Alle anderen Anfragen an eine nicht spezifizierte Adresse und einen nicht spezifizierten Port werden vom Hauptserver zugestellt.
| |
|
| |
| Jede Verwendung von * in einer Deklaration eines virtuellen Hosts hat einen höheren Vorrang als _default_.
| |
|
| |
| === Migrieren eines namensbasierten vhosts zu einem IP-basierten vhost ===
| |
| Der namensbasierte vhost mit dem Hostnamen www.example.org (aus unserem namensbasierten Beispiel, Setup 2) sollte seine eigene IP-Adresse erhalten.
| |
| * Um Probleme mit Nameservern oder Proxies zu vermeiden, die die alte IP-Adresse für den namensbasierten vhost zwischengespeichert haben, wollen wir während einer Migrationsphase beide Varianten anbieten.
| |
|
| |
| Die Lösung ist einfach, denn wir können die neue IP-Adresse (172.20.30.50) einfach in die VirtualHost-Richtlinieaufnehmen.
| |
|
| |
| <syntaxhighlight lang="apache" line copy>
| |
| Listen 80
| |
| ServerNamewww.example.comDocumentRoot "/www/example1"
| |
|
| |
| <VirtualHost 172.20.30.40 172.20.30.50>
| |
| DocumentRoot "/www/example2"
| |
| ServerNamewww.example.org # ...
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.40>
| |
| DocumentRoot "/www/example3"
| |
| ServerNamewww.example.net ServerAlias *.example.net # ...
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| Der vhost kann nun über die neue Adresse (als IP-basierter vhost) und über die alte Adresse (als namensbasierter vhost) erreicht werden.
| |
|
| |
| === Verwendung der ServerPath-Richtlinie ===
| |
| Wir haben einen Server mit zwei namensbasierten vhosts.
| |
| * Um den richtigen virtuellen Host zu finden, muss ein Client den richtigen Host:Header senden.
| |
| * Alte HTTP/1.0-Clients senden einen solchen Header nicht und der Apache hat keine Ahnung, welchen vhost der Client zu erreichen versucht hat (und bedient die Anfrage vom primären vhost).
| |
| * Um so viel Abwärtskompatibilität wie möglich zu gewährleisten, erstellen wir einen primären vhost, der eine einzelne Seite mit Links mit einem URL-Präfix zu den namensbasierten virtuellen Hosts zurückgibt.
| |
|
| |
| <syntaxhighlight lang="apache" line copy>
| |
| <VirtualHost 172.20.30.40>
| |
| # primary vhost
| |
| DocumentRoot "/www/subdomain"
| |
| RewriteEngine On
| |
| RewriteRule "." "/www/subdomain/index.html"
| |
| #...
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.40>
| |
| DocumentRoot "/www/subdomain/sub1"
| |
| ServerName www.sub1.domain.tld ServerPath "/sub1/"
| |
| RewriteEngine On
| |
| RewriteRule "^(/sub1/.*)" "/www/subdomain$1"
| |
| #...
| |
| </VirtualHost>
| |
|
| |
| <VirtualHost 172.20.30.40>
| |
| DocumentRoot "/www/subdomain/sub2"
| |
| ServerNamewww.sub2.domain.tld ServerPath "/sub2/"
| |
| RewriteEngine On
| |
| RewriteRule "^(/sub2/.*)" "/www/subdomain$1"
| |
| # ...
| |
| </VirtualHost>
| |
| </syntaxhighlight>
| |
|
| |
| Aufgrund der ServerPath-Direktive wird eine Anfrage an die URL https://www.sub1.domain.tld/sub1/ immer vom sub1-vhost bedient.
| |
| Eine Anfrage an die URL https://www.sub1.domain.tld/ wird nur dann vom sub1-vhost bedient, wenn der Client einen korrekten Host: Header gesendet hat.
| |
| * Wenn kein Host: Header gesendet wird, erhält der Client die Informationsseite vom primären Host.
| |
|
| |
| Bitte beachten Sie, dass es eine Besonderheit gibt: Eine Anfrage an https://www.sub2.domain.tld/sub1/ wird auch dann vom sub1-vhost bedient, wenn der Client keinen Host: Header gesendet hat.
| |
|
| |
| Die RewriteRule-Direktiven werden verwendet, um sicherzustellen, dass ein Client, der einen korrekten Host:- Header gesendet hat, beide URL-Varianten verwenden kann, d. h. mit oder ohne URL-Präfix.
| |
|
| |
|
| [[Kategorie:Apache/HTTP/Vhost]] | | [[Kategorie:Apache/HTTP/Vhost]] |