ubuntuusers.de

Virtual Hosts

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Der Apache-Webserver kann so konfiguriert werden, dass er für unterschiedliche Hostnamen verschiedene Inhalte liefert. Dies wird als "Virtual Hosting" bezeichnet und ist nützlich, um viele Websites auf einem Apache-Webserver zur Verfügung zu stellen.

Jede dieser Websites nennt sich im Folgenden Virtual Host, es ist nicht notwendig, für jede dieser Websites eine eigene IP Adresse zu haben, alle Virtual Hosts können sich eine IP-Adresse teilen.

Einrichtung

Namensbasierte Virtuelle Hosts sind die gängigste Methode zur Konfiguration virtueller Hosts und werden für eine gemeinsame IP-Adresse eingerichtet. Apache entscheidet anhand des HTTP-Headers, welche Seite ausgeliefert wird.

Im Verzeichnis /etc/apache2/sites-available/ befindet sich die Datei 000-default.conf. Diese kann man als Vorlage für die weiteren virtuellen Hosts verwenden. Für jeden virtuellen Host wird dann eine eigene Datei angelegt.

Virtual Hosts konfigurieren

Im Folgenden wird die Standardkonfigurationsdatei des Virtuellen Hosts "default" erklärt, die einzelnen Direktiven sind Links in die deutschsprachige Apache-Dokumentation, wo weitere Informationen verfügbar sind. Am Besten speichert man den Inhalt dieser Datei neu unter /etc/apache2/sites-available/.

Die VirtualHost-Direktive 🇩🇪 sorgt dafür, dass Apache alle Anfragen aller IP-Adressen für Virtual Hosts verwendet. Es ist auch möglich, dies auf eine von mehreren IPs zu begrenzen.

VirtualHost

Die einzelnen Dateien in /etc/apache2/sites-available/<optionaler prefix>-<virtualhostname>.conf :

1
2
3
4
5
<VirtualHost *:80>
.
.
.
</VirtualHost>

Der <virtualhostname> Dateiname muss zwingend auf .conf enden! Ansonsten wird bei Aktivierung des VirtualHost mit a2ensite ein Fehler generiert. Der Prefix ist optional und sorgt nur dafuer, dass die Konfigurationsdateien in der intuitiven Reihenfolge geladen werden.

Die VirtualHost-Direktive dient dazu, weitere Direktiven für einen Virtual Host zu definieren. Alles, was zwischen diesen beiden Tags steht, wird nur für diesen einen Virtual Host verwendet. Innerhalb einer Datei können grundsätzlich auch mehrere <VirtualHost>-Blöcke verwendet werden.

ServerAdmin

1
ServerAdmin webmaster@localhost

Mit der ServerAdmin Direktive sollte die E-Mail-Adresse des Server-Administrators hinterlegt werden. Diese wird u.a. in den Fehlermeldungen des Apache stehen und ist für den Kontakt zum Administrator erforderlich!

ServerName

1
ServerName servername

Mit der ServerName Direktive wird festgelegt, unter welchem primären Namen eine Seite erreichbar ist. Es ist zwingend erforderlich, dass dieser Name entweder via DNS oder alternativ über die /etc/hosts auflösbar ist!

ServerAlias

1
ServerAlias name1 name2 name3

Wenn ein und die selbe Seite unter verschiedenen Rechnernamen erreichbar sein muss, ist es erforderlich, diese mit der ServerAlias Direktive zu definieren. Achtung! Keine unerlaubten Zeichen (z.B. Bindestrich) verwenden.

DocumentRoot

1
DocumentRoot /var/www/html

Mit der Direktive DocumentRoot muss das Basisverzeichnis (engl. "document root") des Virtual Hosts (bzw. der Seite) angegeben werden. Sollte nun mit http://SERVERNAME/datei.html ein Zugriff versucht werden, so würde Apache in diesem Beispiel die Datei /var/www/html/datei.html an den Client ausliefern.

Hinweis:

Es ist sehr sinnvoll, für jede Datei unter /etc/apache2/sites-available/ auch einen Ordner unterhalb von /var/www/html anzulegen, da so die Übersicht über mehrere Virtual Hosts einfacher ist. Des Weiteren machen mit einigen Apache-Modulen wie suphp andere Verzeichnisse als /var/www/html Probleme!

Directory / Location

Mit der Directory und Location Direktive können Einstellungen und Berechtigungen für die Verzeichnisse des Apache vergeben werden. Eine detaillierte Erklärung der möglichen Direktiven innerhalb der Directory-Direktive würde den Umfang dieses Wiki-Artikels jedoch bei weitem sprengen. Weitere Informationen findet man in der offiziellen 🇬🇧 Apache-Dokumentation.

Physikalische Verzeichnisse

Ein physikalisches Verzeichnis ist ein real existierender Ordner im Dateisystem, auch hierfür können Einstellungen und Berechtigungen vergeben werden.

1
2
3
4
5
6
        <Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
Virtuelle Verzeichnisse

Ein Virtuelles Verzeichnis ist ein Ordner, der mit dem Browser aufgerufen wird, dies ist bei jeder Seite mindestens /, welche für das Basisverzeichnis des Servers steht.

1
2
3
4
        <Location />
                Options FollowSymLinks
                AllowOverride None
        </Location>

Hinweis:

Eine Location Direktive ist nicht unbedingt nötig, auch wird eine Location Direktive nach allen anderen Direktiven (Directory, .htaccess, Files) ausgewertet. Der Vorteil einer Location Direktive ist, dass sie sich auf URLs und nicht auf physikalisch vorhandene Dateien bezieht.

Wichtiges innerhalb der Directory oder Location Direktive

Hier als Beispiel die wichtigsten Direktiven innerhalb von Directory:

  • Options - Ermöglicht das Anpassen von Optionen für diesen Pfad

  • AllowOverride - Hiermit kann man einstellen, was innerhalb der Seite mit einer vorhandenen .htaccess erlaubt ist

  • Require - Hiermit können die Zugriffsrechte für dieses Verzeichnis angegeben werden. Mehr Informationen hierzu finden sich in der Apache Dokumentation zur Authentifizierung 🇬🇧.

Beispiel

So würde eine funktionierende Virtual Host Konfiguration aussehen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<VirtualHost *:80>
        ServerName maxisforum.example.com     
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/maxisforum/
        <Directory /var/www/maxisforum/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Require all granted
        </Directory>
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
        ServerSignature On
</VirtualHost>

Administration

Wenn ein neuer Virtual Host angelegt wurde, ist dieser zwar verfügbar ("available") aber noch nicht aktiviert ("enabled"). Bei auf Debian basierenden Systemen (somit auch Ubuntu) können folgende Befehle verwendet werden:

sudo a2ensite MEIN_VHOST.conf 

Dies würde den VirtualHost mit dem Dateinamen MEIN_VHOST aktivieren.

Natürlich kann man die Seite auch wieder deaktivieren mit dem Befehl:

sudo a2dissite MEIN_VHOST.conf 

Hinweis:

Wenn man die Seite default mit a2dissite deaktiviert hat, ist sicher zu stellen, dass es eine NameVirtualHost Anweisung gibt!

Namensauflösung für Testzwecke

Ubuntu

Um einen VirtualHost ohne vorhandenen DNS Eintrag zu testen, ist es möglich, die /etc/hosts hierfür anzupassen. Es muss lediglich der Eintrag von localhost angepasst werden. Angenommen eine /etc/hosts sieht so aus:

1
127.0.0.1 localhost

könnte man dies so machen:

1
127.0.0.1 localhost virtualhosttest

Natürlich muss man virtualhosttest durch den konfigurierten Hostnamen ersetzen.

Windows

Windows verfügt ebenfalls über eine Hosts-Datei. Zu finden unter C:\Windows\System32\drivers\etc. Zum Bearbeiten sind Administrator-Rechte erforderlich. Die Syntax ist identisch zu der von Ubuntu, folgende Zeile muss hinzugefügt werden (die IP ist entsprechend anzupassen):

1
192.168.1.100 virtualhosttest

Da neuere Web-Browser den Begriff "virtualhosttest" an eine Suchmaschine weiterleiten ist zum Aufrufen das geforderte Protokoll mit anzugeben. Zum Beispiel: http://virtualhosttest.

Hinweis:

Getestet mit Windows 7

Fehlerbehebung

Fehlerhafte Konfiguration

Mögliche Ursachen für eine fehlerhafte Konfiguration:

  • Im ServerAlias wurden unerlaubte Zeichen verwendet (z.B. ein Bindestrich, Unterstrich, Umlaute etc.).

Error 403: Forbidden

Befindet sich die WebSite des virtuellen Hosts nicht unter /var/www/html ist zusätzlich ein Anpassung von /etc/apache2/apache2.conf erforderlich. Der Daemon kann in der Standardkonfiguration nur auf bestimmte Verzeichnisse zugreifen. Zum Gewähren des Zugriffes ist die genannte Datei zu erweitern:

1
2
3
4
5
<Directory /virtual/host/directory/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Intern

Extern

Diese Revision wurde am 29. Juli 2019 19:37 von Beforge erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Apache, Internet, Server, Netzwerk