Anhang A. Eine lokale Domain mittels Apache Virtual Hosts erstellen

Inhaltsverzeichnis

A.1. Einleitung
A.2. Apache mit virtuellen Hosts konfigurieren
A.3. Die lokale HOSTS-Datei konfigurieren
A.4. Fazit

A.1. Einleitung

Im Laufe Ihrer Programmiererkarriere (oder Ihres Hobbys) werden Sie irgendwann lernen müssen, wie man virtuelle Hosts verwendet. Das Konzept dahinter ist, mehrere Domainnamen unter derselben lokalen IP zu hosten. Diese Domains werden für Ihren Webserver konfiguriert, und obwohl die Namen eventuell abweichen, werden wir der Konsistenz zuliebe die Terminologie von Apache verwenden.

In diesem Anhang werde ich beschreiben, wie man eine lokale Domain namens "helloworld.tld" erstellt, deren URL http://helloworld.tld sein wird. Das Prinzip ist beinahe ident mit jenem der öffentlichen Domains. Der Hauptunterschied liegt darin, dass Ihre DNS-Einträge bei öffentlichen Domains für das Hosting der neuen Domain-Namen konfiguriert sein müssen. Bei lokalen Domains jedoch können wir statt der Verwendung von DNS-Einträgen schlicht eine neue Domain zur hosts-Datei Ihres Systems hinzufügen, die in nahezu allen Systemen (inklusive Windows) vorhanden ist.

Der Grund dafür, dass wir während der Entwicklung lokale Domains verwenden, ist recht simpel. Wir können somit für jedes Projekt neue Domains anlegen und müssen nicht alle Projekte als Unterverzeichnisse unter localhost warten. Sobald man sich einmal damit beschäftigt hat, ist es auch ein wirklich einfacher Schritt, da er sich von Domain zu Domain außer beim Servernamen und den verzeichnis- oder locationspezifischen Konfigurationen, die man vielleicht vornehmen will, nicht unterscheidet.

A.2. Apache mit virtuellen Hosts konfigurieren

Um eine neue lokale Domain zu erstellen, müssen Sie zu Beginn Apache konfigurieren. Die Vorgangsweise für virtuelle Hosts ist je nach System unterschiedlich; die folgende Anleitung geht von einem Ubuntu-System aus und bietet einige Bemerkungen sowie Anweisungen für Windows-Systeme.

Ubuntu verwendet für virtuelle Hosts in Apache ein "managed setup" und Module, was für die Konfiguration sehr angenehm ist. Virtuelle Hosts werden in Dateien im Verzeichnis /etc/apache2/sites-available definiert, wobei jeder Dateiname verwendet werden kann (logischerweise ist ein Name zu bevorzugen, der leicht mit der zu hostenden Domain in Verbindung gebracht werden kann - ich verwende zumeist den Domainnamen selbst). Das Aufteilen der Konfiguration auf zahlreiche Dateien erlaubt zwar eine feinere Kontrolle der Einstellungen, aber viele andere Systeme verwenden oft nur entweder die Hauptdatei http.conf oder die Datei apache2.conf, oder auch eine Datei speziell für virtuelle Hosts wie http-vhosts.conf.

Wir wollen die folgende Basiskonfiguration für virtuelle Hosts verwenden:

# Port einstellen, auf dem auf Anfragen gewartet wird
NameVirtualHost *:80

# Stellen Sie sicher, dass "localhost" unverändert auf den
# üblichen Document-Root unseres Systems verweist. 
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www
</VirtualHost>

# Einrichtung des virtuellen Hosts "helloworld.tld"
<VirtualHost *:80>
    ServerName helloworld.tld
    DocumentRoot /home/padraic/www/helloworld/public

    <Directory /home/padraic/www/helloworld/public>
        Options Indexes FollowSymLinks Includes
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

In Ubuntu würden wir diese Konfiguration implementieren, indem wir zuerst /etc/apache2/ports.conf bearbeiten, damit es die folgende Zeile enthält:

# Port einstellen, auf dem auf Anfragen gewartet wird
NameVirtualHost *:80

Da Ubuntu den localhost mit dem Document Root /var/www in der Konfigurationsdatei /etc/apache2/sites-available/default vordefiniert, müssen wir nur eine neue Datei unter /etc/apache2/sites-available/helloworld.tld erstellen, welche die Konfiguration für helloworld.tld enthält:

# Einrichtung des virtuellen Hosts "helloworld.tld"
<VirtualHost *:80>
    ServerName helloworld.tld
    DocumentRoot /home/padraic/www/helloworld/public

    <Directory /home/padraic/www/helloworld/public>
        Options Indexes FollowSymLinks Includes
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Wenn wir zum Beispiel Windows mit XAMPP verwenden, dann bearbeiten wir C:/xampp/apache/conf/extra/http-vhosts.conf, da es keine seperaten Konfigurationsdateien für Ports oder bestimmte Domains gibt. Um sicherzugehen, dass die vhosts-Datei als Konfiguration geladen wird, sollte die Hauptkonfigurationsdatei von XAMPP (http.conf) diese Zeile enthalten:

# Virtuelle Hosts
Include conf/extra/httpd-vhosts.conf

Hier ist eine Beispielkonfiguration unter XAMPP für Windows:

# Port einstellen, auf dem auf Anfragen gewartet wird
NameVirtualHost *:80

# Sicherstellen, dass "localhost" beibehalten wird
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "C:\xampp\htdocs"
</VirtualHost>

# Einrichtung des virtuellen Hosts "helloworld"
<VirtualHost *:80>
    ServerName helloworld.tld
    DocumentRoot "C:\projects\helloworld\public"

    <Directory "C:\projects\helloworld\public">
        Options Indexes FollowSymLinks Includes
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Alle anderen Windows-Varianten folgen einem ähnlichen Muster. Falls Sie nicht weiterkommen, fügen Sie die Konfiguration einfach an das Ende der Haupt-Apache-Konfigurationsdatei an.

Die obige Konfiguration erzeugt zwei Domainnamen: localhost und helloworld.tld. localhost noch einmal zu erstellen erscheint etwas dumm, aber es ist notwendig damit wir sicher sein können, dass localhost intakt bleibt und als einmaliger Domainname von Apache erkannt wird, wenn virtuelle Hosts verwendet werden. Der Abschnitt nach der Konfiguration von localhost erzeugt eine neuen virtuellen Host mit dem Servernamen "helloworld.tld", der Apache auf den neuen Document Root verweisen sollte, wenn wir http://helloworld.tld in den Browser eingeben. Da wir Zend Framework verwenden, ist der Document Root immer das Verzeichnis /public der Anwendung. Denken Sie daran, dass die Anwendung nahezu überall gespeichert werden kann, wodurch Sie wesentlich flexibler bestimmen können, wo die Dateien der Anwendung liegen. Sie könnten ein Verzeichnis /www oder /public_html in Ihrem Home-Verzeichnis unter Linux verwenden oder ein Verzeichnis /www auf Ihrer C:-Partition unter Windows. Der Name des Verzeichnisses ist damit eigentlich uninteressant - eine gute Konvention hilft Ihnen nur dabei, dass Sie wissen, worum es sich handelt. Tun Sie sich keinen Zwang an: wenn Sie wollen, nennen Sie das Verzeichnis wheelsoffire.

Zuletzt muss eine Verzeichnis-Konfiguration für den Document Root des neuen virtuellen Hosts angelegt werden. Indem man die entsprechenden Rechte verteilt, stellt man sicher, dass Apache Anfragen von diesem Verzeichnis aus bedienen kann. Apache liefert die Dateien eines Verzeichnisses nicht aus, wenn man nicht die entsprechenden Zugriffsrechte hat. Standardmäßig sind die Optionen stark eingeschränkt, um unautorisierte Zugriffe aus dem Web zu vermeiden, also schauen Sie darauf, dass Sie die Auslieferung von Dateien im Document Root erlauben. Die Optionen, die ich hier einsetze, verwendet Apache üblicherweise für den Document Root von localhost. Die Einstellungen sind ziemlich liberal und erlauben die Verwendung von .htaccess-Dateien, damit die Benutzer zur Laufzeit auf die Apache-Konfigurationsoptionen zugreifen können.

Um diesen virtuellen Host unter Ubuntu zu aktivieren, müssen wir nur die folgenden Befehle aufrufen, damit wir einen symbolischen Link (symlink) für die neue Konfigurationsdatei in /etc/apache2/sites-enabled/helloworld.tld erzeugen:

sudo a2ensite helloworld.tld
sudo /etc/init.d/apache2 reload

Verwenden Sie Windows oder eine andere Linux-Variante, dann wird das erneute Laden oder der Neustart von Apache denselben Effekt haben, da Sie vermutlich nicht das Site-Layout von Ubuntu für diese Systeme verwenden. Die Ubuntu-Methode ermöglicht es Ihnen, dass Sie eine Domain offline nehmen, indem Sie den entgegengesetzten Befehl a2dissite ausführen.

Es gibt dementsprechend ähnliche Befehle wie a2enmod und a2dismod, mit denen Module einfacher aktiviert/deaktiviert werden können, als wenn man die Konfigurationsdateien manuell bearbeitet.

A.3. Die lokale HOSTS-Datei konfigurieren

Wir sind aber noch nicht fertig. Wir müssen nun noch die neue Domain "helloworld" auf die korrekte lokale IP umleiten. Das lässt sich ziemlich einfach erledigen, indem man den neuen Domainnamen in die lokale HOSTS-Datei einträgt, welche lokale Domains erkennt und auf die entsprechende IP-Adresse umlegt.

Unter Ubuntu ist diese Datei in /etc/hosts zu finden. Man kann sie zum Beispiel so bearbeiten:

sudo nano /etc/hosts

Wir können sichergehen, dass unser System die lokale Domain erkennt, die wir für die Konfiguration des neuen virtuellen Hosts verwenden wollen, indem wir sie wie folgt verändern:

127.0.0.1       localhost
127.0.0.1       helloworld.tld
127.0.1.1       padraic-desktop

# Die folgenden Zeilen sind für IPv6-kompatible Hosts interessant
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Mehr braucht man nicht - nur die Verbindung unserer lokalen Domain mit der IP-Adresse des localhost. Unter Windows ist diese Datei normalerweise nur durch einen Administrator-Benutzer bearbeitbar; in Windows Vista muss man die Rechte eventuell zwischenzeitlich anpassen oder einen Editor mit Administratorprivilegien öffnen, um die Datei zu bearbeiten. Abgesehen davon fällt die Bearbeitung nahezu ident aus. Die HOSTS-Datei finden Sie unter C:\Windows\System32\drivers\etc\hosts:

# Copyright (c) 1993-2006 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

127.0.0.1       localhost
127.0.0.1       helloworld.tld
::1             localhost

Wir sehen, dass helloworld.tld bei beiden Varianten auf 127.0.0.1 umgelegt wird (dieselbe IP wie bei localhost, aber Apache wird den Unterschied bemerken und entsprechend unserer Konfiguration den korrekten virtuellen Host verwenden). Sorgen Sie sich nicht um die hier gezeigte Referenz ::1. Es handelt sich um ein IPv6-Muster, das wir diesmal nicht anrühren müssen. Ich empfehle Ihnen, sich weiter über die HOSTS-Datei zu informieren, um andere Optionen wie die Verwendung verschiedener lokaler IPs vollständig zu verstehen.

A.4. Fazit

In diesem Anhang haben wir gelernt, wie wir virtuelle Hosts für unsere lokalen Domains erstellen und aktivieren können. Es gibt keinen Grund, sich hier vor etwas zu fürchten! Das erstellen neuer Hosts ist eine gängige Praxis und ein einfacher Vorgang, sobald man sich von dem Gedanken verabschiedet, alle Projekte unter dem Standard-Document-Root von Apache zu bündeln. Mit ein wenig Übung kann man nicht nur ganze Domains, sondern auch Subdomains replizieren - was perfekt die tatsächlichen Hosting-Konditionen wiedergibt, wenn man das Projekt ausliefert. Dadurch kann man leistungssteigernde Taktiken wie das Ausliefern von Bildern, CSS- und JavaScript-Dateien über verschiedene Subdomains testen, um die Beschränkung der gleichzeitigen Verbindungen zu einer Domain bei modernen Browsern zu umgehen (ein wohlbekanntes Nadelöhr beim Download von Webseiten) und man hat eine Rootdomain, mit der man besser arbeiten kann als wenn man sich mit Unterverzeichnissen herumärgern muss, bei denen das Root-Verzeichnis den zu ladenden Dateien immer vorangestellt werden muss. Ich bin sicher, dass Ihnen viele sinnvolle Anwendungsfälle einfallen. Was Sie hier lernen, ist direkt auf Produktivsysteme anwendbar, bei denen die Erstellung virtueller Hosts für Ihre registrierten und gehosteten Domains nicht nur üblich, sondern sogar notwendig ist, falls Sie nicht ein zwischengeschaltetes Management-Tool verwenden.

Im Verlaufe dieses Buches werde ich auf andere Konfigurationsoptionen verweisen, die Sie den Einstellungen Ihres virtuellen Hosts hinzufügen können, da ich hier nur die allerwichtigsten Elemente erwähnt habe.