Hosting auf dem Root-Server: So konfiguriert man Apache

65 Prozent aller Websites weltweit laufen unter Apache. ZDNet erläutert am Beispiel von Debian und Ubuntu die Konfiguration für Einsteiger und zeigt, wie man auf einem Server mehrere Websites mit nur einer IP-Adresse einrichtet.

Im World Wide Web werden die meisten Websites mit dem Apache HTTP Server betrieben. Laut Netcraft verwenden ihn im August etwa 65 Prozent aller Domains. Konkurrent Microsoft muss sich beim Internet Information Server (IIS) mit einem Marktanteil von etwa 15 Prozent zufrieden geben. Betrachtet man nur die Top-1-Million-Sites, ergibt sich ein nahezu identisches Bild. Die Marktanteile unterscheiden sich nur in den Nachkommastellen.

Allerdings gilt Apache als schwierig zu konfigurieren. Viele Website-Betreiber verwenden daher ein Konfigurationstool wie Plesk. Wer allerdings die volle Kontrolle über seine Websites behalten und einige Einstellungen feintunen möchte, kommt nicht umhin, seine Konfigurationsdateien selbst zu schreiben.

Zudem sind Tools wie Plesk recht ressourcenintensiv. Wer nur wenige Websites mit moderatem Traffic betreiben möchte, kann bares Geld sparen, indem er einen virtuellen Server bei einem Hoster in der Preiskategorie von 10 bis 20 Euro pro Monat anmietet.

Der Apache HTTP Server ist unangefochtener Marktführer bei Webservern (Grafik: netcraft.com).
Der Apache HTTP Server ist unangefochtener Marktführer bei Webservern (Grafik: netcraft.com).

Das ist einfacher als oft vermutet. Die meisten Linux-Distributionen bieten Apache vorkonfiguriert an. Wer nur eine einzige Website ohne SSL-Unterstützung betreiben möchte, muss in der Regel nur wenig Änderungen vornehmen.

Grundsätzlich kennt Apache nur eine Konfigurationsdatei, nämlich /etc/apache2/apache2.conf. Die meisten Linux-Distributionen binden jedoch über Include-Direktiven ein komplexes System von weiteren Config-Dateien in unterschiedlichen Verzeichnissen ein.

In diesem Artikel wird die Konfiguration von mehreren Websites auf einem Server am Beispiel von Debian und Ubuntu erläutert. Bei den meisten Distributionen, die auf Debian oder Ubuntu basieren, etwa Linux Mint, kann man ebenfalls nach dieser Anleitung vorgehen.

Wer Apache noch nicht installiert hat, kann dies mit dem Terminalbefehl apt-get install apache2 erledigen. Wer nicht als root angemeldet ist, muss diesem und jedem weiteren Befehl in diesem Artikel das Wort sudo voranstellen oder einmalig sudo -s eingeben. Nach der Installation ist Apache sofort mit einer Default-Website betriebsbereit. Wenn man mit einem Browser an die IP-Adresse des Servers geht, sollte die bekannte "It-Works-Seite" erscheinen.

So sieht die Default-Website von Apache nach der Installation aus.
So sieht die Default-Website von Apache nach der Installation aus.

Unter Debian und verwandten Distributionen steht diese Webseite im Verzeichnis /var/www in der Datei index.html.

Als eine erste Aktion kann man die Datei durch eine eigene austauschen. Zum Testen kann man einen Editor wie vi, nano oder joe verwenden, um die Datei wie folgt zu ändern:

Nach dem Abspeichern sollte nach einem Refresh (F5 drücken) des Browsers folgende Website erscheinen:

Die Datei index.html im Verzeichnis /var/www lässt sich nach Belieben ändern.
Die Datei index.html im Verzeichnis /var/www lässt sich nach Belieben ändern.

Wenn ein erster Test funktioniert, kann man schon eine ganze statische Website aus mehreren Dateien, die man beispielsweise mit einem HTML-Editor erstellt hat, in das Verzeichnis /var/www kopieren und sie würde funktionieren.

So sieht die Konfigurationsdatei für eine Website aus

Die Konfigurationsdatei für die Default-Website hat den Namen /etc/apache2/sites-available/default. Der Inhalt ist jedoch schon recht komplex. Einsteiger sollten sich zunächst auf das Wesentliche konzentrieren. Man kann die Datei wie folgt vereinfachen:

Mit <VirtualHost> bestimmt man zunächst, auf welche IP-Adresse und welchen TCP-Port die Website hören soll. <VirtualHost *:80> bedeutet, dass Port 80 von jeder verfügbaren IP-Adresse verwendet wird.

Unter ServerAdmin trägt man die E-Mail-Adresse des Administrators ein. Mit DocumentRoot bestimmt man, dass das virtuelle Root-Verzeichnis der Website in /var/www im Dateisystem liegen soll.

Als nächstes bestimmt man, dass außerhalb von /var/www kein Zugriff erfolgen darf. Das ist eine wichtige Sicherheitsmaßnahme, die nie vergessen werden darf. Zwischen <Directory /> und </Directory> stehen die Zeilen Order deny,allow und deny from all. Die erste Zeile bedeutet, dass zunächst alle Deny-Anweisungen und dann alle Allow-Anweisungen abgearbeitet werden. Mit der zweiten Zeile wird der Zugriff generell verboten.

Im Verzeichnis /var/www soll natürlich ein Zugriff erlaubt sein. Für eine öffentliche Website erlaubt man typischerweise mit den Zeilen Order allow,deny und allow from all den generellen Zugriff. Kommt es später zu einem DoS-Angriff von einer bestimmten IP-Adresse, etwa 203.0.113.15, kann man den Angreifer mit der zusätzlichen Zeile deny from 203.0.113.15 aussperren.

Die Zeile Options legt bestimmte Parameter für das Verzeichnis /var/www fest. Jeder Option, die man abschalten möchte, stellt man ein Minus-Zeichen voran. Wer eine Option einschalten möchte, schreibt einfach ihren Namen. Optional kann zur Verdeutlichung ein Plus-Zeichen vorangestellt werden.

-Indexes bestimmt, dass Website-Besucher nicht nach Dateien suchen können. Legt man versehentlich eine vertrauliche Datei in das Verzeichnis /var/www, muss ein Besucher den genauen Namen kennen, um sie herunterzuladen.

FollowSymLinks bedeutet, dass Apache symbolische Links beachtet. Wenn in /var/www ein Link auf /root/geheim.txt gesetzt ist, wird Apache versuchen, jedem Nutzer die Datei geheim.txt im Browser anzuzeigen, auch wenn das Verzeichnis /root nicht unterhalb von /var/www liegt.

Eigentlich möchte man daher im Normalfall, dass Apache symbolische Links ignoriert und die Option -FollowSymLinks erscheint im ersten Moment sinnvoller. Allerdings ergibt sich daraus ein Performance-Problem, da Apache bei jeder Datei prüfen muss, ob es sich um einen symbolischen Link handelt oder nicht.

In der obigen Beispielkonfiguration wurden jedoch alle Zugriffe außerhalb von /var/www durch die Zeilen zwischen <Directory /> und </Directory> verboten, so dass man auf das langsamere Option -FollowSymLinks verzichten kann.

AllowOverides None legt fest, dass .htaccess-Dateien in den Verzeichnissen ignoriert werden. Apache bietet die Möglichkeit, in einzelnen Verzeichnissen von der Standard-Konfiguration abzuweichen, indem man eine Datei mit dem Namen .htaccess in das Verzeichnis schreibt. Das sollte, wenn immer möglich vermieden werden, weil das ebenfalls die Performance negativ beeinflusst. Wenn man eine URL wie http://www.example.com/ordner1/ordner2/ordner3/datei.html hat, muss Apache in jedem Ordner nach einer Datei .htaccess suchen und sie – sofern vorhanden – abarbeiten.

Die drei restlichen Zeilen ErrorLog, CustomLog und LogLevel bestimmen die Log-Optionen. Das Verzeichnis ${APACHE_LOG_DIR} steht standardmäßig auf /var/log/apache2.

Wenn man an der Apache-Konfiguration etwas geändert hat, lässt sich die neue Konfiguration mit dem Befehl apache2ctl graceful aktivieren. Nach dem Ausführen des Befehls sollte die Website so funktionieren wie vorher. Bevor man eine neue Konfiguration aktiviert, kann man mit apache2ctl configtest einen Syntaxcheck vornehmen.

Ein Download-Verzeichnis einrichten

Will man ein Download-Verzeichnis erstellen, etwa um Nutzern Fotos anzubieten, muss in diesem Verzeichnis die Suche nach Dateien erlaubt werden. Dazu legt man das Verzeichnis zunächst mit mkdir /var/www/Fotos an. Danach fügt man folgende Zeilen in die Config-Datei /etc/apache2/sites-available/default hinzu:

Damit übernimmt man alle Einstellungen von /var/www auch in /var/www/Fotos mit Ausnahme der Option Indexes, die man explizit einschaltet. Anschließend testet man mit apache2ctl configtest, dass man keine syntaktischen Fehler gemacht hat, und aktiviert die neue Konfiguration mit apache2ctl graceful.

Wenn nun einige Fotos oder andere Dateien in das Verzeichnis /var/www/Fotos kopiert werden, sehen die Nutzer im Browser Folgendes:

Wenn die Option Indexes aktiviert ist, können Nutzer alle vorhandenen Dateien anzeigen lassen.
Wenn die Option Indexes aktiviert ist, können Nutzer alle vorhandenen Dateien anzeigen lassen.

Mehrere Websites auf einem Server

Wenn man mehrere Websites auf einem Server mit nur einer IP-Adresse betreiben möchte, ist es zwingend erforderlich DNS-Einträge auf die IP-Adresse zu legen. Um das auszuprobieren, kann man einen kostenlosen DynDNS-Provider nutzen, etwa dyndns.com oder dtdns.com. ZDNet verwendet zu Testzwecken meist die Third-Level-Domain ZDNetLabs.DarkTech.org.

Solche Third-Level-Domains bekommt man inklusive DNS-Service einerseits kostenlos, andererseits sind sie unmittelbar nach der Einrichtung weltweit verfügbar, da das DNS-Caching nur auf 30 bis 60 Sekunden konfiguriert ist. Man kann später auf andere Domains umsteigen.

Zunächst stellt man sicher, dass in der Datei /etc/apache2/ports.conf die Zeile NameVirtualHost *:80 eingetragen ist. In neueren Versionen von Debian und Ubuntu ist das bereits standardmäßig der Fall.

Danach trägt man in der Default-Config-Datei /etc/apache2/sites-available/default die Zeile ServerName foo.bar ein, direkt nach <VirtualHost *:80>. foo.bar lässt man wörtlich stehen. Man kann auch einen anderen Namen verwenden, es muss aber ein Fantasiename sein, den man definitiv nicht verwenden möchte.

Will man eine zweite Website mit dem Namen Apache2.ZDNetLabs.DarkTech.org erstellen, legt man dafür eine zweite Konfigurationsdatei im Verzeichnis /etc/apache2/sites-available an. Typischerweise gibt man ihr den gleichen Namen wie der Website, etwa /etc/apache2/sites-available/Apache2.ZDNetLabs.DarkTech.org.

Normalerweise unterscheidet sich die Datei sich kaum von der Default-Konfiguration, so dass man am besten die Datei /etc/apache2/sites-available/default kopiert und die Kopie später abändert, dass sie wie folgt aussieht:

Geändert wurden die Zeilen DocumentRoot und der zweite <Directory>-Block, so dass sie auf das Verzeichnis /var/Apache2.ZDNetLabs.DarkTech.org zeigen, das man natürlich auch erstellen muss. Ferner wurden ServerName und ServerAlias so konfiguriert, dass sie Website auf die Namen Apache2.ZDNetLabs.DarkTech.org, www.example.net und www.example.com reagiert. ServerName akzeptiert immer nur einen Parameter. Hinter ServerAlias lassen sich beliebig viele DNS-Namen schreiben, jeweils durch ein Leerzeichen getrennt.

Die Konfiguration der Logdatei wurde in diesem Beispiel unverändert gelassen, was bedeutet, dass Apache den Zugriff auf alle Websites in dieselben Dateien protokolliert. Wer getrennte Logdateien wünscht, ändert den Dateinamen einfach ab.

Damit die neue Website weltweit funktioniert, müssen DNS-Einträge für die drei Namen erstellt werden, so dass sie auf die IP-Adresse des Servers zeigen. Für ein lokalen Test reicht es, wenn man die Datei hosts auf dem Test-Client mit dem Browser abändert. Sie befindet sich unter Windows im Verzeichnis C:WindowsSystem32Driversetc und in /etc bei unixoiden Betriebssystemen wie Linux und Mac OS.

Anschließend aktiviert man die neue Website mit a2ensite Apache2.ZDNetLabs.DarkTech.org. Der Parameter nach a2ensite gibt den Dateinamen der Konfigurationsdatei an, unabhängig davon wie die DNS-Namen der Websites lauten.

Als Letztes wird Apache erneut mit apache2ctl graceful angewiesen, die neue Konfiguration zu starten. a2ensite schlägt den Befehl /etc/init.d/apache2 reload vor, der auch funktioniert, aber umständlicher zu tippen ist. Die Website arbeitet natürlich erst, wenn man eine Datei index.html in das Verzeichnis /var/Apache2.ZDNetLabs.DarkTech.org legt. Danach sollte im Browser etwa Folgendes erscheinen:

So kann eine zweite Website auf demselben Server mit nur einer IP-Adresse aussehen.
So kann eine zweite Website auf demselben Server mit nur einer IP-Adresse aussehen.

Wenn man mit dem Browser wieder die IP-Adresse oder einen anderen DNS-Namen eingibt, der auf die IP-Adresse des Servers zeigt, aber nicht in ServerName beziehungsweise ServerAlias eingetragen ist, erscheint die Default-Website.

Auf diese Weise lassen sich beliebige weitere Websites auf einem Server mit Apache anlegen. Man erstellt eine Konfigurationsdatei pro Website und aktiviert diese anschließend.

Weitergehende Möglichkeiten

Wenn man sich einmal soweit mit Apache vertraut gemacht hat, dass man die Grundkonfiguration versteht, will man sicherlich noch weitere Dinge ausprobieren. Dazu zählen etwa

  • Einbindung von dynamischen Applikationen und Skriptsprachen wie PHP
  • CGI versus Apache-Module
  • verschlüsselte Websites mit SSL
  • Nutzung einer Datenbank wie MySQL

Diese Themen behandelt ZDNet in einem zweiten Artikel, der nächste Woche erscheint. Danach werden Leser in der Lage sein, fertige Webanwendungen wie Wikis, Content-Management-Systeme, beispielsweise WordPress, Joomla oder Typo3, und andere Dienste auf ihrem Server zu installieren.

Themenseiten: Linux, Open Source, Server, Servers, Software, Storage, Storage & Server, Webentwicklung

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

3 Kommentare zu Hosting auf dem Root-Server: So konfiguriert man Apache

Kommentar hinzufügen
  • Am 3. September 2011 um 21:49 von Daniel

    Ein kleiner Hinweis
    Vor einem apache2ctl graceful solltet ihr immer ein apache2ctl -t absetzen. Hiermit werden syntaktische Fehlkonfiguration in den Apache-Konfigurationsdateien kurz überprüft und ihr haltet euch so nicht aus Versehen den Apachen an. Macht ihr einen Apache-Reload und in irgendeiner Config-Datei ist ein kleiner Fehler, dann läuft auch keine euren Websites mehr …

    Ansonsten: Gute Zusammenfassung für Einsteiger.

  • Am 21. September 2011 um 15:29 von hb

    zweiter artikel
    mit spannung warte ich nun seit 2 wochen auf den zweiten artikel zum thema wiki, usw. installieren

    • Am 21. September 2011 um 15:36 von Christoph H. Hochstätter

      AW: Hosting auf dem Root-Server: So konfiguriert man Apache
      Kommt vermutlich (99% sicher) am Freitag.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *