Virtuelle Hosts mit Apache
In diesem Artikel geht es darum virtuelle Hosts mit Apache anzulegen. Der Apache Webserver bietet die Möglichkeit virtuelle Hosts anzulegen. Für mich als Entwickler ist das vor allem für meine zahlreichen Projekte interessant, welche ich alle auf einem einzigen Apache Server installiert habe. Dort kann ich einfach Produktiv und Testumgebungen anlegen. Für meine Zwecke verwende ich XAMPP für Mac, diese Anleitung sollte aber auch für XAMPP unter anderen Betriebssystemen funktionieren bzw. auf tatsächlichen Apache Webserver Installationen.
Virtuelle Hosts mit Apache
Unter dem Webserver Apache kann man virtuelle Hosts anlegen. Dabei wird der Applikation ein Name gegeben über welchen man diese über die URL aufrufen kann. Wo die Applikation im Dateisystem liegt ist dabei vollkommen egal, solange der Webserver darauf Zugriff hat. Durch virtuelle Hosts mit Apache kann man Applikationen aus unterschiedlichsten Quellen unter einer Adresse oder Domain anbieten und vor allem recht einfach verschieben und umbenennen, ohne dass man dazu den Code ändern muss.
Projekte anlegen
Normalerweise legt man neue Projekte im ‚htdocs‚ Verzeichnis von XAMPP an. Dort findet sich nach einer Basisinstallation beispielsweise die Webapplikation Webalizer. Bei gestartetem Apache kann man diese Applikation im Browser unter localhost/webalizer erreichen. Wollen wir also schnell unsere Applikation testen, so kopieren wie sie einfach dort hinein und können dann sofort über localhost im Browser darauf zugreifen.
Vorteile
- schnell und einfach
- keine weitere Konfiguration nötig
Nachteile
- alle Projekte sind nur über localhost erreichbar
- man muss entweder das Projekt vorm Testen immer kopieren, oder man erstellt einen Link
Konfiguration
Um einen virtuellen Host zu erstellen schauen wir in das ‚etc‚ Verzeichnis unserer XAMPP Installation. In der Datei ‚httpd.conf‚ ändern wir globale Einstellungen für den Apache. Dies könnte für manche Projekte interessant sein, da man Module aktivieren und deaktivieren kann. Wir schauen aber weiter in das ‚extra‚ Verzeichnis. Dort liegt die für die virtuellen Hosts benötigte Datei ‚httpd-vhosts.conf‘. Es empfiehlt sich vor dem Ändern dieser Datei schnell eine Kopie zu erstellen.
Auf den ersten Blick zeigt die Datei, dass hier schon ein virtueller Host definiert ist. Ja, localhost ist auch ein virtueller Host! Diesen lassen wir wie er ist. Weitere virtuelle Hosts kann man einfach darunter hinzufügen. Folgender Code erstellt einen virtuellen Host:
<VirtualHost *:80> ServerName MyTestApp DocumentRoot "/Volumes/Data/Users/werner/mytestapp" DirectoryIndex index.php <Directory "/Volumes/Data/Users/werner/mytestapp"> AllowOverride All Allow from All </Directory> </VirtualHost>
Die Konfiguration ist durchaus einfach. Folgendes muss eingestellt werden:
- ServerName
das ist der Name unseres Hosts. Die Seite wird im Browser über ‚MyTestApp‘ erreichbar sein - DocumentRoot
das ist der Pfad wo der Code unserer Webapplikation liegt. In diesem Beispiel in meinem OSX Home Verzeichnis - DirectoryIndex
üblicherweise die index.php oder index.html Datei welche dem Benutzer zuerst angezeigt wird - Directory
hier kann man Zugriffsberechtigungen für das Applikationsverzeichnis festlegen.
Problem
Nach einem Neustart unseres Apache sollte die Applikation über ‚MyTestApp‚ erreichbar sein. Doch es funktioniert nicht. Nach einer langen Fehlersuche und Recherche habe ich dann den Fehler gefunden. Die Lösung ist einfach und selbsterklärend. Es fehlt einfach ein Eintrag unseres virtuellen Hosts in der ‚hosts‘ Datei unseres Betriebssystems. Dies ist von System zu System unterschiedlich. Bei Unix ähnlichen Systemen (Linux, OSX) einfach die Datei ‚/etc/hosts‘ editieren. Wir fügen hier also folgende Zeile am Ende dazu:
127.0.0.1 MyTestApp
Nun funktioniert der virtuelle Host!
Fazit
Virtuelle Hosts mit Apache werden gerne auf Webserver eingesetzt um diese über den Browser aufrufbar zu machen, im Dateisystem müssen diese Applikationen aber dann nicht zwangsläufig alle im selben Verzeichnis (meist /var/www) liegen. Ein Linux Server auf dem mehrere Benutzer Applikationen verwalten und bearbeiten macht es durchaus Sinn die Daten im jeweiligen Benutzerverzeichnis abzulegen. Jeder Benutzer hat ein eigenes Login, bearbeitet nur seine Daten, der Webserver stellt aber alle Applikationen zur Verfügung als wären sie im selben Verzeichnis abgespeichert.
Ist das Anlegen virtueller Hosts sinnvoll? Wie schaut eure /etc/hosts Datei aus?
Ich wüsste gerne wie man bei Apache2 Sub Domains erstellt.