====== Virtuelle Webserver mit Apache2 ======
[[http://buecher.lingoworld.de/apache2/showdir.php?id=757&o=mod
|gute Übersichtsseite zu virtuellen servern mit Konfigurationsbeispielen]]
===== Ziel und Zweck von virtuellen Webservern =====
Man teilt einen physikalischen Server/Computer in mehrere virtuelle Teile auf, die dann unterschiedliche Webseiten/Dienste anbieteten.
===== 3 unterschiedliche Möglichkeiten: =====
==== IP-basierte virtuelle Hosts ====
Der Server lauscht unter verschiedenen IPs. Die verschiedenen Ports laufen dann auf andere Verzeichnisse, das ist gerade für [[netzwerke:ssl und tls|SSL oder TLS]]-verschüsselte Adressen nötig.
==== Namens-basierte virtuelle Hosts ====
Namens-basierte virtuelle Server werden am häufigsten verwendet, Apache entscheidet anhand der vom Browser gesendeten HTTP/1.1-Header welcher virtueller Server das Ziel ist. Ältere (sehr alte) Browser, die nur HTTP/1.0 unterstüzen landen als immer auf dem ersten virt. Server, allerdings kommen so alte Browser in der Praxis kaum vor.
Man kann leicht Subdomains anlegen, z.B. mail.server.de, www.server.de, ...
:!: [[apache:virtuelle server#namens-basierte virtuelle hosts|namensbasierte virtuelle Server]] sind in Verbindung mit SSL nur sehr eingeschränkt möglich (Zertifikat gilt dann nur für einen der virt. Server). Es muss eine eigene IP pro [[netzwerke:ssl und tls|SSL oder TLS]]-geschützter Seite existieren. Der Grund ist das die passende IP Teil des HTTP-Request ist, der nur mit dem passenden Host-Schlüssel entschlüsselt werden kann. Da aber der passende Host erst anhand des HTTP-Request ermittelt wird, kann es an dieser Stelle zu keiner Verifizierung kommen.
Hier eine minimale Konfiguration:
Listen 80
NameVirtualHost *
ServerName Domain1.tld
ServerAlias www.Domain1.tld
...
ServerName Domain2.tld
ServerAlias www.Domain2.tld
...
==== Port-basierte virtuelle Hosts ====
Auf einem Server/einer IP lauscht der [[apache:Apache]]2-[[server:Webserver]] auf verschiedenen Ports, z.B. 80,81,82, 8080, ...
Die verschiedenen Ports laufen dann auf andere Verzeichnisse.
===== Konfiguration =====
==== Wo kann man das einstellen? ====
...in der Apache2-Konfigurationsdatei, es bietet sich an die Anweisungen für virtuelle Server in eigene Datei zu legen.
Hier ist z.B. bei Debian und Ubuntu **das Unterzeichnis ''sites-enabled''** vorgesehen.
Es ist eine einfache Textdatei die Direktiven (Anweisungen) enthalten. Diese wird beim starten von Apache eingelesen und ausgewertet.
==== Wie kann man es einstellen? ====
Man legt sog. -Container an die dann die Einstellungen (genauer: Direktiven) für den jeweiligen virtuellen Host an.
Beispiel:
ServerName www1.mynet.de
ServerAdmin webguy@mynet.de
DocumentRoot /var/www1/htdocs
ErrorLog logs/www1.error_log
CustomLog logs/www1.access_log common
Es ist ein Ip-Basierter Virtueller Host\\
''ServerName'' gibt den angezeigten Namen an\\
''ServerAdmin'' gibt die eMail des Admins des virt. Servers an\\
**''DocumentRoot''** (ganz wichtig) gibt das Stammverzeichnis an, in dem die Webseiten für diesen Host liegen, man würde also hier beim eingeben von ''www1.mynet.de'' die Index-Seite aus ''/var/www1/htdocs'' angezeigt bekommen \\
ErrorLog oder CustomLog gibt andere Speicherort für die Logdateien (fehler- und normale Logdatei)\\
Dann wird der Comtainer wieder mit '''' geschlossen.
===== Spezialfall lokaler Testserver =====
Grundsätzlich wird man entweder für die 127.x.x.x-IPs in die hosts-Datei eintragen (schwer zu merken) oder Subdomänen von localhost anlegen (namensbasiert).
Allerdings bleibt immer der Nachteil alle virtuellen Hosts in die hosts-Datei einzutragen (''C:\Windows\System32\Drivers\etc\hosts'' in Windows oder ''/etc/hosts'' unter Linux).
Eine elegante Lösung: [[http://www.schmidtwisser.de/cms/blog/all/2005/07/komfortabel-virtualhosts-fr-lokales.html|Komfortabel VirtualHosts für lokales Testing mit Apache]].
==== urspüngliche Lösung ====
wenn man es nicht wie oben machen will, hier der umständlichere Weg:
Servername linux.intern
NameVirtualHost *:80
ServerName virtuell1.linux.intern
ServerAdmin webmaster@localhost
DocumentRoot /var/www/virtuell1
ErrorLog /var/log/apache2/virtuell_error_log
CustomLog /var/log/apache2/virtuell_access_log combined
ServerName virtuell2.linux.intern
ServerAdmin webmaster@localhost
DocumentRoot /var/www/virtuell2
ErrorLog /var/log/apache2/virtuell_error_log
CustomLog /var/log/apache2/virtuell_access_log combined
in der /etc/hosts :
127.0.0.1 linux.intern
127.0.0.1 virtuell1.linux.intern
127.0.0.1 virtuell2.linux.intern