Mit Apache Virtual Host können Sie mehrere Websites auf demselben Server ausführen.
Zum Beispiel kann ich sowohl thegeekstuff.com als auch top5freeware.com auf einem einzigen physischen Server ausführen, auf dem ein Apache-Webserver läuft.
Abb.:Apache Virtual Host (Mehrere Websites, ein Apache)
Es gibt zwei Arten von Konfigurationen für virtuelle Apache-Hosts:1) IP-basierte virtuelle Hosts und 2) namensbasierte virtuelle Hosts. Für die meisten Szenarien wird ein namensbasierter virtueller Host empfohlen.
IP-basierter virtueller Host
Wenn Sie in dieser Konfiguration zwei Websites (mit unterschiedlichen IP-Adressen) auf den Server verweisen, auf dem Apache ausgeführt wird, sollten für diesen physischen Server zwei unterschiedliche IP-Adressen konfiguriert sein.
Das bedeutet, dass der Server über zwei Ethernet-Karten verfügen sollte, von denen jede auf die IP-Adresse der entsprechenden Website konfiguriert ist, die der virtuelle Apache-Host bedienen wird. Daher ist dies für die meisten Aspekte nicht praktikabel und Sie sollten dies nicht verwenden.
Im folgenden Beispiel enthält der Server zwei NIC-Karten, eine ist mit der IP-Adresse 192.168.101.1 für thegeekstuff.com konfiguriert, eine andere ist mit 192.168.102.1 für top5freeware.com konfiguriert. Diese beiden IP-Adressen werden von einem einzigen Apache-Webserver bedient, der auf diesem Server unter Verwendung eines IP-basierten virtuellen Hosts läuft.
Abb.:Apache IP-basierter virtueller Host
Namensbasierter virtueller Host
Wenn der Apache-Webserver in dieser Konfiguration eine Anfrage erhält, sucht er im HTTP-Header nach dem Hostnamen und bedient abhängig vom Hostnamen verschiedene Websites. Dies ist sehr einfach, da Sie nur eine IP-Adresse auf diesem physischen Server benötigen; Sie aktualisieren jedoch das DNS mit mehreren Website-Namen, die auf dieselbe IP-Adresse verweisen. Aus praktischen Gründen verwenden Sie nur die namensbasierte virtuelle Hostkonfiguration.
Im folgenden Beispiel enthält der Server nur eine NIC-Karte, die mit der IP-Adresse 192.168.101.1 konfiguriert ist. Der DNS-Eintrag für die Websites thegeekstuff.com und top5freeware.com zeigt auf die IP-Adresse 192.168.101.1. Wenn Apache eine Anfrage erhält, sucht es nach dem Hostnamen-Eintrag im HTTP-Header und stellt die entsprechende Website bereit.
Abb.:Apache Name-Based Virtual Host
1. Entkommentieren Sie httpd-vhosts.conf in httpd.conf
Wenn Sie Apache 2 aus der Quelle installiert haben, wird standardmäßig die folgende Zeile in der Datei httpd.conf kommentiert. Kommentieren Sie diese Zeile aus.
# vi /usr/local/apache2/conf/httpd.conf Include conf/extra/httpd-vhosts.conf
2. Virtuelle Hosts einrichten
Ändern Sie die httpd-vhosts.conf wie unten gezeigt, um eine namensbasierte virtuelle Hosteinstellung für zwei Hosts einzurichten.
- NameVirtualHost *:80 – Gibt an, dass alle namensbasierten virtuellen Hosts den Standardport 80 überwachen
- Im folgenden Beispiel richten wir einen virtuellen Host für thegeekstuff.com und top5freeware.com ein, der denselben Port 80 überwacht. Es gibt also zwei
- Wenn Sie zu thegeekstuff.com gehen, werden die Dateien unter /usr/local/apache2/docs/thegeekstuff von Apache bereitgestellt; und das access_log und error_log für diese Seite werden unter /usr/local/apache2/logs/thegeekstuff abgelegt
# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/usr/local/apache2/docs/thegeekstuff" ServerName thegeekstuff.com ServerAlias www.thegeekstuff.com ErrorLog "logs/thegeekstuff/error_log" CustomLog "logs/thegeekstuff/access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/usr/local/apache2/docs/top5freeware" ServerName top5freeware.com ServerAlias www.top5freeware.com ErrorLog "logs/top5freeware/error_log" CustomLog "logs/top5freeware/access_log" common </VirtualHost>
3. Überprüfen Sie die VirtualHost-Konfigurationssyntax
Überprüfen Sie die Syntax der virtuellen Konfiguration mit „httpd -S“, wie unten gezeigt. Wenn alles richtig eingerichtet ist, wird nur „Syntax OK“ angezeigt.
# /usr/local/apache2/bin/httpd -S VirtualHost configuration: Syntax OK
Wenn etwas nicht richtig konfiguriert ist, wird eine Warnmeldung angezeigt, einschließlich der Meldung „Verzeichnis wird nicht beendet“, wie unten gezeigt.
# /usr/local/apache2/bin/httpd -S Warning: DocumentRoot [/usr/local/apache2/docs/top5freeware] does not exist Warning: ErrorLog [/usr/local/apache2/logs/thegeekstuff] does not exist Syntax OK
4. Starten Sie Apache neu und testen Sie
# /usr/local/apache2/bin/apachectl restart
Wenn Sie jetzt zu thegeekstuff.com (oder www.thegeekstuff.com) gehen, stellt der Apache die Dateien aus dem Verzeichnis /usr/local/apache2/docs/thegeekstuff bereit.
Wenn Sie zu top5freeware.com (oder www.top5freeware.com) gehen, wird derselbe Apache, der auf demselben Server läuft, die Dateien aus dem /usr/local/apache2/docs/top5freeware-Verzeichnis bereitstellen.
Um es noch einmal zu wiederholen:Damit der namensbasierte virtuelle Host richtig funktioniert, sollte der DNS-Eintrag für diese beiden Websites auf dieselbe externe IP-Adresse des physischen Servers zeigen, auf dem der Apache-Webserver läuft.