Der Standard-Webserver im Internet ist heute der Apache-Server, eine Weiterentwicklung (a patch) des klassischen NCSA-Webservers httpd. Der Apache-Server ist freie Software und steht unter fast allen Betriebssystemen zur Verfügung. Seine wirkliche Herkunft kann er jedoch nicht verbergen, sowohl vom Namen (httpd) als auch vom Aufbau der Konfiguration (/etc/httpd/httpd.conf) ist er sehr Unix-typisch.

Der Server selbst kann entweder über den inetd gestartet werden (Eintrag in /etc/inetd.conf) oder er wird direkt vom init-script aufgerufen. Der Aufruf über den inetd ist eher die Ausnahme. Bei Linux wird er meist durch einen Eintrag in der Datei /etc/rc.config gestartet:

  START_HTTPD="yes"

Die Konfiguration des Servers findet im Verzeichnis /etc/httpd statt. Dort befinden sich mehrere Dateien, von denen uns eigentlich nur die Datei httpd.conf interessieren muß.

Diese Datei ist in drei Teile untergliedert:

  1. Die globale Konfiguration
    Anweisungen, die sich auf die Operationen des ganzen Webservers beziehen.
  2. Die Konfigurationen für den „Default Server“
    Anweisungen, die sich auf den Hauptserver beziehen. Das ist der Server, der nicht als virtueller Server angesprochen wird.
  3. Die Konfiguration der virtuellen Server
    Anweisungen, die sich auf virtuelle Hosts beziehen. Das erlaubt es uns, Anfragen an verschiedene IP-Adressen oder Hostnamen von einem Server beantworten zu lassen.

Wenn innerhalb der Konfigurationsdatei Pfadangaben gemacht werden, so wird zwischen absoluten und relativen Pfaden unterschieden. Wenn eine Pfadangabe mit einem Slash (/) beginnt, dann bezieht sich dieser Pfad tatsächlich auf den genannten Pfad. Einer Pfadangabe ohne führenden Slash wird der Wert der Variable ServerRoot vorangestellt. Wenn ServerRoot auf „/usr/local/httpd“ gesetzt ist und eine Angabe wie „log/datei.log“ gemacht wird, dann ist die Datei „/usr/local/httpd/log/datei.log“ gemeint.

Sektion 1 – Globale Einstellungen

Hier stehen die globalen Einstellungen für den Webserver. Besonders interessant sind hier die folgenden Einträge: ServerType Typ

Hier wird eingestellt, ob der Server vom inetd oder als eigenständiger Server gestartet werden soll. Die möglichen Werte für Typ sind inetd oder standalone. Der Wert inetd ist nur bei Unix-Servern verfügbar.

ServerRoot Pfad

Hier steht die Pfadangabe des Wurzelverzeichnisses des Webservers. Alle anderen Pfadangaben, die nicht mit einem Slash beginnen, verstehen sich relativ zu diesem Pfad.

LockFile Datei

Der Name und Pfad des Lock-Files. Ein LockFile ist eine Datei, die anzeigt, dass schon ein Webserver läuft. Jedesmal, wenn ein Server gestartet wird, legt er diese Datei an, wenn der Server abgebrochen wird, so löscht er sie wieder. Das verhindert, dass versehentlich mehrere Server gleichzeitig gestartet werden.

PidFile Datei

Jedesmal, wenn ein Server gestartet wird, legt er in der angegebenen Datei seine ProzessID ab. Damit ist es möglich, den Server wieder zu killen, ohne erst mit ps die PID herauszufinden.

Timeout Sekunden

Die Anzahl von Sekunden, nach denen eine Verbindung als abgebrochen gewertet wird, wenn solange nichts mehr gesendet oder empfangen wurde.

KeepAlive on|off

Schalter, ob es erlaubt sein soll, mehrere Nachfragen für eine Verbindung zu beantworten.

MaxKeepAliveRequests Zahl

Die maximale Anzahl der denkbaren gleichzeitigen Nachfragen für eine Verbindung. Wenn dieser Wert auf 0 steht, so heißt das, dass keine Beschränkung besteht.

MinSpareServers Zahl
MaxSpareServers Zahl
MaxRequestsPerChild Zahl
StartServers Zahl


MaxClients Zahl

Der Apache-Webserver baut automatisch soviele Server auf, wie im Augenblick benötigt werden. Dabei geht es nicht darum, dass ein Server nur eine Anfrage bedienen kann. Jeder Server kann soviele Anfragen beantworten, wie in MaxRequestsPerChild angegeben wurde. Beim Start von httpd werden automatisch soviele Serverprozesse gestartet, wie in StartServers angegeben wurden. Damit sich die Anzahl der verwendeten Server immer dynamisch anpassen kann, werden die minimale und maximale Anzahl der zu startenden Server in MinSpareServers und MaxSpareServers angegeben. Insgesamt kann der Server nicht mehr als MaxClients gleichzeitig bedienen.

Listen Portnummer


Listen IP-Adresse:Portnummer

Diese Angabe erlaubt es, dass der Server neben dem Standard-Port 80 auch noch andere Ports abhört und beantwortet. Wenn neben dem Port noch eine IP-Adresse angegeben wurde, so reagiert der Server nur auf diesen Port, wenn er unter dieser IP-Adresse angesprochen wurde. Das bedeutet aber, dass der Server zwingend mehrere IP-Adressen hat.

BindAddress Adresse

Hiermit wird dem Server mitgeteilt, auf welche Adressen er reagieren soll. Dabei handelt es sich um seine eigenen Adressen, nicht die der Clients. Möglich ist hier die Angabe eines Sternchens (*), einer IP-Adresse oder eines kompletten Hostnamens mit Domain-Namen. Der Server reagiert dann nur, wenn er unter dieser Adresse angesprochen wurde. Damit kann z.B. ein Rechner mit zwei Netzwerkkarten nur die Clients eines der beiden Netze bedienen.

Die weiteren Angaben innerhalb der Sektion 1 beziehen sich auf die Module, die der Server laden soll. Dabei handelt es sich um die Ttsache, dass der httpd selbst modular aufgebaut und so während der Laufzeit erweiterbar ist. Veränderungen an diesen Angaben sind nur notwendig, wenn neue Module hinzugefügt werden sollen oder bestehende abgeschaltet.

Sektion 2 – Einstellungen des Default-Servers

Alle Angaben, die in dieser Sektion gemacht werden, können später in den einzelnen Angaben für virtuelle Hosts nochmal auftauchen. Alle Angaben hier werden später bei den virtuellen Hosts auch als voreingestellter Wert verwendet. Interessante Angaben hier sind:

Port Portnummer

Der Port, auf dem standardmäßig der Server sitzt. Meist 80.

User Username

Group Gruppenname

User und Gruppe, unter der der Server laufen soll. Hier können sowohl Namen, als auch Nummern (UID/GID) stehen. Der Server und alle Prozesse, die er startet werden unter diesen IDs gestartet. Unter Linux ist hier meistens als User wwwrun und als Gruppe nogroup eingestellt. Damit vermeidet man gefährliche Angriffe von außen, weil selbst beim Abarbeiten eines Scripts das nur unter einer harmlosen ID passiert.

ServerAdmin E-Mail Adresse

Die E-Mail Adresse, an die der Server seine Meldungen schicken soll.

ServerName Servername

Der Wert, der hier angegeben ist, wird dem Client zurückgegeben, wenn er eine Anfrage macht. Statt dem realen Hostnamen kann hier z.B. der Name www.lokale.Domain angegeben werden. So sieht der Client nicht, auf welchem Rechner der Server läuft. Der angegebene Name muß ein gültiger Hostname der Rechners sein, also etwa ein Alias im Nameserver.

DocumentRoot Pfad

Der Pfad zu dem Verzeichnis, in dem die HTML-Dokumente stehen, die der Server anbietet.

Directory

Für jedes angegebene Verzeichnis muß eine ganze Sammlung von Optionen und Einstellungen bestehen, die in der Form:

<Directory Verzeichnisname>
...
</Directory>

angegeben wird. Alles, was zwischen <Directory> und </Directory> steht gilt für das angegebene Verzeichnis.
Interessant sind hier insbesondere die folgenden Punkte:

Order Reihenfolge

Hier wird eingestellt, in welcher Reihenfolge die nachfolgenden Direktiven „allow from“ oder „deny from“ abgearbeitet werden sollen. Möglich ist hier entweder deny,allow oder allow,deny.

deny from Host
allow from Host

Der angegebene Hostname kann entweder ein all sein, dann meint es alle Hosts. Ansonsten ist es möglich einen Domainname, einen Hostnamen, eine vollständige oder teilweise IP-Adresse anzugeben.
Die Kombination

Order deny,allow
deny from all
allow from .mydomain.de

erlaubt allen Mitgliedern der Domain mydomain.de den Zugriff, alle anderen haben keinen. Umgekehrt wäre der Eintrag

Order allow,deny
allow from all
deny from 10.230.1

die Anweisung, dass alle Zugriff haben, außer den Mitgliedern des Netzes 10.230.1.0

AuthType basic
AuthName Domainname
AuthUserFile Dateiname
AuthGroupFile Dateiname
require Art Mitglied

Mit der Kombination dieser Angaben ist es möglich, ein Verzeichnis nur bestimmten Usern oder bestimmten Gruppen zugänglich zu machen. Diese User bzw. Gruppen sind nicht identisch mit den Usern und Gruppen des Systems. Die beiden Dateien, die bei AuthUserFile und AuthGroupFile genannt sind enthalten die einzelnen Angaben der User bzw. Gruppen. Beide Dateien sollten nicht in dem Verzeichnis stehen, das sie schützen. Die Angabe einer Sicherheitsdomain mit AuthName ist notwendig. Gewöhnlicherweise steht hier der Name der eigenen Domain, es ist aber frei wählbar.

Das Format des Userfiles ist:
Username : verschlüsseltes Passwort

Das Format des Gruppenfiles ist:
Gruppenname: Mitglied Mitglied Mitglied …

Der Befehl require verlangt als erstes die Angabe, welcher Typ Sicherheit hier gefragt ist. Gültige Werte sind hier user, group oder valid-user. Wenn als Typ user angegeben ist, so folgt der Angabe eine durch Leerzeichen getrennte Liste von Usernamen. Wenn group angegeben ist, so stehen statt den Usernamen Gruppennamen. Wenn valid-user angegeben wurde, so hat jeder User, der in der angegebenen Userdatei steht Zugriffsrecht.

Beispiel:

<Directory /usr/local/httpd/htdocs/intern>
  AuthType Basic
  AuthName Sicherheitsbereich
  AuthUserFile /etc/wwwpasswd
  require user root
</Directory>

Diese Angaben würden das Verzeichnis /usr/local/httpd/htdocs/intern nur für den User root zugänglich machen. Die Datei /etc/wwwpasswd enthält das Passwort von root in der Form:

  root:xlgJvk0_62VSf

Die verschlüsselte Form des Passworts entspricht genau der Form, die auch in /etc/shadow angewandt wird.

Location URL

Diese Direktive wird wie <Directory> angewandt, also gilt alles, was zwischen <Location> und </Location> steht für eine bestimmte URL. Ansonsten gilt das unter Directory gesagte.

Files Dateinamenmuster

Auch diese Direktive wird wie <Directory> angewandt, also gilt alles, was zwischen <Files> und </Files> steht für die genannten Dateien. Ansonsten gilt das unter Directory gesagte.

DirectoryIndex Dateiname

Der Dateinae, der angenommen wird, wenn kein Dateiname angegeben wurde. Meist ist dieser Dateiname index.html oder default.html

Sektion 3 – Virtuelle Hosts

Der Apache-Webserver erlaubt es, sogenannte virtuelle Hosts zu definieren. Dabei handelt es sich um Adressen oder Hostnamen, die physikalisch die gleiche Maschine ansprechen, wobei aber der Webserver unterschiedliche Seiten anzeigt.

Grundsätzlich wird zwischen IP-Adressen-basierten Virtual hosts und Namensbasierten virtual hosts unterschieden. Die ersteren sind selten, weil sie tatsächlich eine eigene IP-Adresse für jeden virtuellen Host benötigen, die dann auch weltweit (oder zumindest im lokalen Netz) bekannt sein muß. Die zweite Form ist hingegen sehr häufig, sie ermöglicht es, einem bestimmten Namen einen eigenen virtuellen Host zuzuweisen.

Dieser Name muß natürlich netzweit gültig sein, also etwa ein Alias im Nameserver oder in der Datei /etc/hosts.

Um einen namensbasierten virtuellen Host anzulegen wird in der Sektion 3 der Datei httpd.conf erstmal eine reale IP-Adresse zugewiesen:

  NameVirtualHost 10.230.2.100

Anschließend können beliebig viele virtuelle Hosts angelegt werden, die immer die Form

  <VirtualHost 10.230.2.100>
    ServerName VirtuellerName
    DocumentRoot Verzeichnis
    ...
  </VirtualHost>

aufweisen. Neben den beiden zwingenden Angaben ServerName und DocumentRoot können hier grundsätzlich alle Direktiven aus der Sektion 2 stehen.