VirtualHost unter WAMP
(Lokale Installation bestehend aus Windows-Apache-MySQL-PHP)
Standard-Installation
Bei der Installation des Apache-Webservers werden in der Ordnerstruktur u.a. die Ordner htdocs
und conf
angelegt (Standard-Installation: c:\apache\htdocs
und
c:\apache\conf
).
Hinweis: Es ist empfehlenswert, die bei der Installation angelegten Standardpfade nicht zu ändern.
Im Ordner c:\apache\conf
liegt die Datei httpd.conf
– eine Konfigurations-Datei für den Apache-Webserver. In der Regel ist die httpd.conf
so konfiguriert, dass der Apache-Webserver im Browser über http://localhost/
(oder auch http://127.0.0.1/
) angesprochen werden kann.
Das Verzeichnis, das durch den Aufruf von http://localhost/
angesprochen wird, ist normalerweise c:\apache\htdocs
– alle Dateien, die sich in diesem Verzeichnis oder einem Unterverzeichnis davon befinden, können somit über den Aufruf von http://localhost/
angesprochen werden.
Eine typische Verzeichnisstruktur sähe also folgendermaßen aus:
c:\Apache\
htdocs\
projekt_1\
projekt_2\
- usw.
Der jeweilige Aufruf erfolgt über
http://localhost/
http://localhost/projekt_1/
http://localhost/projekt_2/
usw.
Hinweis: Das Vorhandensein einer korrekten Index-Datei (zum Beispiel index.html
) wird vorausgesetzt.
Wer nur wenige Projekte zu verwalten (und reichlich Platz auf Partition C:\) hat, kann mit diesem Setup sicherlich prima leben und sich den Rest dieses Artikels sparen :-)
Einrichten von „VirtualHost
”
Möchte man jedoch auf Ordner außerhalb von c:\apache\htdocs
zugreifen, kann man sich das Leben erleichtern und sogenannte „Virtuelle Hosts” (VirtualHost
) einrichten. Diese Maßnahme befreit nicht nur von Platzmangel, sondern erleichtert auch den Aufruf im Browser (kürzere Adressen).
Abgesehen davon sorgen virtuelle Hosts dafür, dass man die Programmierung lokal so „wie im echten Leben” durchführen kann, d.h. man kann auf die von PHP gelieferte Variable DocumentRoot
zugreifen und alle Angaben von ihr aus gesehen relativ halten. Das erleichtert einiges.
Diese virtuellen Hosts müssen natürlich andere Namen als localhost
haben, da mit diesem ja nur das Verzeichnis c:\apache\htdocs
angesprochen wird. Um dies zu erreichen, muss man zwei Dinge tun:
1) Die virtuellen Hosts in der httpd.conf
„anmelden”;
2) dem Windows-OS sagen, dass es neben dem standardmäßigen localhost
noch
weitere lokale „Domains” (VirtualHost
) gibt.
Die Einträge in der HTTPD.CONF
Als erstes erstelle man eine Sicherungs-Kopie der Datei httpd.conf
(zur Erinnerung: c:\apache\conf
)!
Anschließend öffnet man die Datei mit einem Text-Editor und trägt folgendes ein:
NameVirtualHost 127.0.0.1
Hinweise: Eine Suche im Dokument findet Beispiel-Einträge und Kommentare, die immer durch eine vorgestellte Raute (#) gekennzeichnet sind.
Nach Änderungen in der httpd.conf
muss ein Neustart des Apache durchgeführt werden.
Jetzt erklärt man dem Apache, was er bei einem Aufruf von http://localhost/
oder http://127.0.0.1/
abarbeiten soll. Dazu benötigt man Einträge mit folgender Syntax:
<VirtualHost 127.0.0.1>
ServerName localhost
ServerAlias 127.0.0.1
DocumentRoot c:/apache/htdocs
ErrorLog c:/apache/logs/error.log
TransferLog c:/apache/logs/access.log
ScriptAlias /cgi-bin/ c:/apache/cgi-bin/
</VirtualHost>
Die Anweisung hinter DocumentRoot
gibt an, welcher Ordner die Dateien enthält, die bei einem Aufruf von http://localhost/
angesprochen werden sollen. ErrorLog
und TransferLog
geben an, wo die Log-Dateien gespeichert werden sollen; ScriptAlias /cgi-bin/
wird benötigt, wenn man Perl nutzen will.
Hinweis: Die hier angegebenen Verzeichnisse gehören zur Standard-Installation von Apache.
Jetzt geht es ans Eingemachte – wir definieren weitere VirtualHost
für die Daten, die außerhalb von c:/apache/htdocs
liegen. Bleiben wir bei unserem obigen Beispiel und nennen die Verzeichnisse „projekt_1” und „projekt_2”. Die Pfade zu diesen Projekten lauten:
f:\entwicklung\projekt_1\
f:\entwicklung\projekt_2\
Direkt unter dem vorherigen <VirtualHost>....</VirtualHost>-Abschnitt beginnen wir einen weiteren Block mit derselben Syntax:
<VirtualHost 127.0.0.1>
ServerName projekt_1
ServerAlias 127.0.0.1
DocumentRoot f:\entwicklung\projekt_1
ErrorLog f:\entwicklung\projekt_1.log
TransferLog f:\entwicklung\projekt_1_access.log
</VirtualHost>
Und noch einen:
<VirtualHost 127.0.0.1>
ServerName projekt_2
ServerAlias 127.0.0.1
DocumentRoot f:\entwicklung\projekt_2
ErrorLog f:\entwicklung\projekt_2.log
TransferLog f:\entwicklung\projekt_2_access.log
</VirtualHost>
Es können beliebig viele VirtualHost
-Abschnitte angelegt werden.
Der Aufruf im Browser erfolgt über die jeweilige Adresse, die hinter ServerName
angegeben ist, in unseren Beispielen also
http://projekt_1/
bzw.
http://projekt_2/
Die zuständigen Dateien sucht sich der Apache im angegebenen DocumentRoot
.
Hinweis: Die Angabe der Pfade für ErrorLog
und TransferLog
wird nachdrücklich empfohlen. Wahlweise kann man dort jeweils ein gemeinsames File für alle VirtualHost
angeben, was die Logfiles uU. jedoch sehr unübersichtlich und schwer analysierbar macht.
Die Einträge für Windows
Auch Windows will wissen, was zum Beispiel http://projekt_1/
bedeutet. Dafür gibt es die Datei hosts
(ohne Dateiendung). Meistens existiert eine Datei namens hosts.sam
– diese Datei kann man mit einem Text-Editor öffnen, anpassen und als hosts
(ohne Dateiendung) abspeichern (auch hier empfiehlt es sich, als erstes eine Sicherungskopie anzulegen).
Je nach Version findet man diese Datei in den folgenden Verzeichnissen:
Windows98: c:\windows\
WinNT/2000: c:\WINNT\system32\drivers\etc\
Für jeden virtuellen Host, den man in der httpd.conf
angelegt hat, muss man nun in der hosts
-Datei einen entsprechenden Eintrag hinzufügen. In unserem Beispiel reicht es, wenn der Inhalt der hosts
-Datei so aussieht:
127.0.0.1 localhost
127.0.0.1 projekt_1
127.0.0.1 projekt_2
Normalerweise kann man die Datei jetzt speichern und ist fertig (Win98). Es kann auch vorkommen, dass man Windows neu booten muss, bevor es die neuen Anweisungen mitbekommt.
Allerdings ist es durchaus möglich, dass Windows noch weitere Anpassungen benötigt.
Je nach verwendeter Win-Version (NT/2000) können die folgenden Anweisungen leicht variieren.
- Systemsteuerung öffnen.
- „Netzwerk- und DFÜ-Verbindungen” öffnen. Dort sollte nun neben „Neue Verbindung erstellen” noch mindestens eine Verbindung sichtbar sein (DFÜ, LAN etc.).
- Rechtsklick darauf und „Eigenschaften” auswählen.
- Bei „Aktivierte Komponenten [...]” das TCP/IP-Protokoll auswählen.
- Ein Klick auf „Eigenschaften” öffnet ein neues Fenster.
- Darin auf „Erweitert...” klicken.
- Dann das Register „WINS” auswählen.
- Dort die „LMHOSTS-Abfrage” aktivieren.
- Ein Klick auf die Schaltfläche „LMHOSTS importieren...” lässt einen „Öffnen”-Dialog erscheinen.
- Hier die hosts
-Datei öffnen.
- Die diversen Einstellungen mit „OK” speichern.
Diese Anleitung behandelt nur den Abschnitt VirtualHost
. Alle anderen Konfigurationsmöglichkeiten der httpd.conf
werden an anderer Stelle betrachtet.
Variations of a Theme
Ein Projekt kann nicht nur über einen Namen, sondern auch über einen Port angesprochen werden.
Die Beschreibung beschränkt sich auf das Wesentliche (eventuell mit er oberen Beschreibung abgleichen).
httpd.conf
öffnen.
Im Abschnitt Listen
folgendes einfügen:
Listen 127.0.0.1:80
Listen 127.0.0.1:81
Im Abschnitt BindAdress
folgendes:
BindAdress 127.0.0.1
Den VirtualHost
eintragen:
NameVirtualHost 127.0.0.1
Die VirtualHost
definieren:
<VirtualHost 127.0.0.1>
ServerName projekt_1
DocumentRoot f:\entwicklung\projekt_1
</VirtualHost>
<VirtualHost 127.0.0.1:80>
ServerName projekt_1
DocumentRoot f:\entwicklung\projekt_1
</VirtualHost>
<VirtualHost 127.0.0.1>
ServerName projekt_2
DocumentRoot f:\entwicklung\projekt_2
</VirtualHost>
<VirtualHost 127.0.0.1:81>
ServerName projekt_2
DocumentRoot f:\entwicklung\projekt_2
</VirtualHost>
Die hosts
-Datei im Windows-Verzeichnis wie oben beschrieben anpassen.
Systembedingte Windows-Einstellungen wie oben beschrieben vornehmen.
Im Browser lassen sich die VirtualHost
wie folgt aufrufen:
http://projekt_1/
oder
http://localhost:80/
http://projekt_2/
oder
http://localhost:81/
Die Definitionen der VirtualHost
lassen sich auch in einer separaten Datei ablegen. Diese Datei könnte zum Beispiel virtualhosts
heissen und in c:\apache\conf\
abgelegt werden. Sie enthält nichts weiter als die besprochenen <VirtualHost>...</VirtualHost>-Blöcke.
In der httpd.conf
referenziert man diese Datei, indem man die Anweisung
include conf/virtualhosts
einfügt.