====== 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