Obwohl der Apache Webserver immer stärkere Konkurrenz z.B. von Nginx („Engine X”) bekommt, ist er nach wie vor der beliebteste Webserver für Linux. Das liegt nicht zuletzt an der einfachen Konfiguration. In kürzester Zeit kann ein Webserver inklusive PHP und MySQL auf die Beine gestellt werden – somit eignet sich Apache besonders für Einsteiger, die den Webserver beispielsweise für ihre ersten Versuche mit PHP benötigen.
In einer kleinen Serie will ich erklären, wie ihr Schritt für Schritt zu einem funktionierenden Webserver mit allen möglichen Erweiterungen wie PHP, MySQL und SSL kommt. Die Serie beginne hier – bei der Grundlegenden Konfiguration von Apache und der Einrichtung von VirtualHosts.
Um überhaupt mit der Konfiguration loslegen zu können, muss der Webserver zuerst installiert werden. Außerdem werden die nachfolgenden Schritte als root-User ausgeführt.
sudo -s apt-get update && apt-get install apache2
Nach der Installation wird der Webserver ein erstes Mal gestartet. Die Beispielseite kann dann über einen Webbrowser angezeigt werden, indem die IP-Adresse des Servers eingegeben wird. Doch nun zur Konfiguration…
VirtualHosts machen den Webserver flexibel …
Ein Apache Webserver kann aus einem oder mehreren sog. VirtualHosts bestehen. Diese Hosts können wie weitere kleine, virtuelle „Unterserver” aufgefasst werden. Angenommen ein Webserver mit einer bestimmten IP soll mehrere Domains bzw Subdomains bedienen: beispiel.de, keine-ahnung.de und test.keine-ahnung.de. … dann müsste für jede der drei Domains ein VirtualHost in der Konfiguration angelegt werden.
Eine grundlegende VirtualHost Konfiguration sieht so aus:
<VirtualHost *:80> ServerName beispiel.de DocumentRoot /var/www/beispiel.de/beispiel.de </VirtualHost>
Die Einstellungen zu jedem VirtualHost werden zwischen ein „<VirtualHost>”-Paar geschrieben. In der ersten Zeile wird außerdem noch der Port angegeben, für den der definierte VirtualHost zuständig sein soll. Im Beispiel lauscht der VirtualHost nur auf Verbindung, die über Port 80 (Standard HTTP) den Webserver erreichen. Anfragen via SSL (Port 443) nimmt er beispielsweise nicht entgegen.
Danach wird mit ServerName die Domain definiert, für die der VirtualHost zuständig sein soll. Im Beispiel ist er nur für beispiel.de zuständig. DocumentRoot definiert das Wurzelverzeichnis, in dem die HTML-oder PHP-Dateien liegen. In diesem Verzeichnis sollte eine index.html oder eine index.php Datei liegen. Diese wird dann beim Aufruf von beispiel.de automatisch geladen und dem Benutzer angezeigt.
VirtualHost Direktiven können noch viele weitere Einstellungen beinhalten, auf die zunächst nicht weiter eingegangen werden soll.
Die VirtualHost Definitionen werden in Konfigurationsdateien in /etc/apache2/sites-available/ geschrieben und auf Wunsch vom Webserver geladen. Warum auf Wunsch? Es ist üblich, nicht alle VH-Definitionen in eine einzige Datei zu packen, sondern diese je nach Domain in verschiedene Dateien auszulagern. So wird für beispiel.de eine Datei /etc/apache2/sites-available/beispiel.de.conf angelegt und für die beiden VHs zu „keine-ahnung.de” eine Datei „keine-ahnung.de.conf”. Jede Domain bekommt ihre VirtualHosts also in eine eigene Datei geschrieben. In dieser Datei werden dann die Definitionen für die Domain selbst und ihre Subdomains (test.keine-ahnung.de) gesammelt. Auf diese Weise kann man Ordnung halten und hat die Möglichkeit, bestimmte Domains inaktiv zu schalten.
Die Dateien in /etc/apache2/sites-available/ werden vom Webserver eigentlich nicht beachtet. Aktiv werden die Dateien erst geschaltet, wenn sie sich in /etc/apache2/sites-enabled/ befinden oder dort verlinkt wurden. Aus diesem Grund müssen neu angelegte VH-Konfigurationsdateien zuerst aktiviert werden, ehe der Webserver sie einliest. Dann werden sie in sites-enabled verlinkt und sind damit aktiv.
Den vorhandenen VH vereinfachen
In /etc/apache2/sites-available befindet sich bereits eine Konfigurationsdatei „000-default.conf”, welche bereits aktiv ist. Bei einem Aufruf der IP des Webservers im Webbrowser wird sie aktiv, denn in ihr ist ein VirtualHost definiert, dem kein ServerName zugeordnet wurde. Auf diese Weise wird der VH aktiv, wenn kein anderer es wird (Default / Fallback). Für alle weiteren VHs muss aber zwingend ein ServerName angegeben werden!
Die Datei enthält schon eine Menge Inhalt, der der Einfachheit halber gelöscht und durch eine neue Konfiguration ersetzt wird:
> /etc/apache2/sites-available/000-default.conf nano /etc/apache2/sites-available/000-default.conf
Neuer Inhalt der Datei:
<VirtualHost *:80> DocumentRoot /var/www/html </VirtualHost>
Dieser VirtualHost zeigt noch immer auf die Demo-Seite, die beim Aufruf der Server-IP-Adresse erscheint – es wurden lediglich Kommentarzeilen entfernt, sodass die Konfiguration einfacher aussieht.
Einen neuen VirtualHost erstellen
Nun soll ein neuer VirtualHost für eine bestimmte Domain erstellt werden. Ich gehe davon aus, dass ihr eine Domain besitzt, welche bereits auf die IP-Adresse eures Webservers verweist. Für die Domain wird zunächst ein eigener Ordner innerhalb des Webserver-Verzeichnisses /var/www geschaffen:
mkdir /var/www/beispiel.de
In diesen Ordner könnt ihr nun eine Beispielseite legen, die später angezeigt werden soll.
Als nächstes wird ein neuer, passender VirtualHost benötigt, der auf die Domain anspricht und die index.html im gerade erstellten Ordner lädt. Dazu wird eine neue Datei „beispiel.de” in /etc/apache2/sites-available erstellt:
nano /etc/apache2/sites-available/beispiel.de.conf
… und folgende Konfiguration eingetragen:
<VirtualHost *:80> ServerName beispiel.de DocumentRoot /var/www/beispiel.de </VirtualHost>
Um dem Webserver die neue Konfiguration unterzuschieben sind noch zwei weitere Schritte erforderlich: Zuerst muss die Konfiguration für beispiel.de aktiviert werden:
a2ensite beispiel.de.conf
… und dann die Konfigurationen neu eingelesen werden:
service apache2 reload
Nun ist der neue VirtualHost aktiv und wird genutzt, sobald jemand über die Eingabe von „beispiel.de” auf euren Server surft. Die index.html / index.php in /var/www/beispiel.de/ wird automatisch geladen und angezeigt. Würde man eine zweite Datei „test.html” in das Verzeichnis legen, wäre diese über den Seitenaufruf „beispiel.de/test.html” erreichbar.
Ein VirtualHost lässt sich übrigens über den Befehl
a2dissite beispiel.de.conf
wieder deaktivieren. Auch in diesem Fall ist es nötig, den Webserver über ein „service apache reload” neu zu laden.
Noch ist der Webserver relativ langweilig …
… das kann man aber ändern. In den folgenden Beiträgen geht es weiter: