Title: Konfigurationsabschnitte

Die Direktiven in den Konfigurationsdateien können sich auf den gesamten Server oder nur auf bestimmte Verzeichnisse, Dateien, Hosts oder URLs beziehen. In den folgenden Abschnitten wird beschrieben, wie mit den Containern der Konfigurationsabschnitte oder .htaccess-Dateien der Bereich anderer Konfigurationsdirektiven geändert wird.

Containertypen der Konfigurationsabschnitte core mod_proxy Directory DirectoryMatch Files FilesMatch IfDefine IfModule Location LocationMatch Proxy ProxyMatch VirtualHost

Es gibt zwei Grundtypen von Containern. Die meisten von ihnen werden für jede Anfrage ausgewertet. Die enthaltenen Direktiven werden nur für die Anfragen angewendet, für die der Containern zuständig ist. Die Container IfDefine und IfModule werden dagegen nur beim Serverstart und beim Neustart ausgewertet. Sind ihre Bedingungen beim Start erfüllt, werden die enthaltenen Direktiven für alle Anfragen angewendet. Werden sie nicht erfüllt, werden sie ignoriert.

Die IfDefine-Direktive enthält Direktiven, die nur angewendet werden, wenn ein entsprechender Parameter in der httpd-Befehlszeile angegeben wird. Bei der folgenden Konfiguration werden beispielsweise alle Anfragen nur dann zu einer anderen Site umgeleitet, wenn der Server mit den Befehl httpd -DClosedForNow gestartet wird:

<IfDefine ClosedForNow>
Redirect / http://otherserver.example.com/
</IfDefine>

Bei der Direktive IfModule werden die enthaltenen Direktiven nur angewendet, wenn ein bestimmtes Modul für den Server geladen wurde. Das Modul muss statisch oder dynamisch kompiliert sein und die Zeile mit der LoadModule-Direktive muss in der Konfigurationsdatei davor stehen. Diese Direktive sollte nur benutzt werden, wenn die Konfigurationsdatei unabhängig davon funktionieren muss, ob bestimmte Module installiert sind. Sie sollte keine Direktiven einschließen, die immer funktionieren müssen, weil sie nützliche Fehlermeldungen über fehlende Module unterdrücken kann.

Im folgenden Beispiel wird die MimeMagicFiles-Direktive nur angewendet, wenn mod_mime_magic zur Verfügung steht.

<IfModule mod_mime_magic.c>
MimeMagicFile conf/magic
</IfModule>

Sowohl IfDefine als auch IfModule können negative Bedingungen anwenden, wenn ein !-Zeichen vorangestellt wird. Außerdem können diese Abschnitte verschachtelt werden, um komplexere Einschränkungen zu erreichen.

Dateisystem und Webbereich

Die am häufigsten benutzten Konfigurationsabschnitts-Container sind diejenigen, die die Konfiguration bestimmter Bereiche des Dateisystems oder des Webbereichs ändern. Dabei ist der Unterschied zwischen diesen beiden Bereichen wichtig. Das Dateisystem ist das Abbild der Festplatte, wie es das Betriebssystem sieht. Bei einer Standardinstallation befindet sich der Apache-Server beispielsweise im Verzeichnis /usr/local/apache2 des Unix-Dateisystems oder im Verzeichnis "c:/Program Files/Apache Group/Apache2" des Windows-Dateisystems. (Beachten Sie, dass auch unter Windows immer einfache Schrägstriche als Trennzeichen im Pfad benutzt werden sollten.) Der Webbereich ist im Gegensatz dazu die Ansicht der Site, so wie sie der Webserver darstellt und der Client sie sieht. Der Pfad /dir/ im Webbereich entspricht daher dem Pfad /usr/local/apache2/htdocs/dir/ im Dateisystem einer standardmäßigen Apache-Installation unter Unix. Der Webbereich muss direkt dem Dateisystem zugeordnet werden, da Webseiten dynamisch über Datenbanken oder andere Bereiche erzeugt werden können.

Dateisystem-Container

Die Directory - und Files -Direktiven sowie ihre Match-Entsprechungen wenden Direktiven auf Teile des Dateisystems an. Direktiven eines Directory-Abschnitts gelten für das genannte Verzeichnis im Dateisystem sowie für alle seine Unterverzeichnisse. Der gleiche Effekt kann mit .htaccess-Dateien erreicht werden. In der folgenden Konfiguration stehen beispielsweise die Verzeichnisindizes für das Verzeichnis /var/web/dir1 und alle seine Unterverzeichnisse zur Verfügung.

<Directory /var/web/dir1>
Options +Indexes
</Directory>

Die Files -Direktiven gelten für jede Datei mit dem angegebenen Namen, unabhängig davon, in welchem Verzeichnis sie sich befindet. Die folgenden Konfigurationsdirektiven aus dem Hauptabschnitt der Konfigurationsdatei verweigern beispielsweise den Zugriff auf jede Datei mit der Bezeichnung private.html, egal, wo sie sich befindet.

<Files private.html>
Order allow,deny
Deny from all
</Files>

Um Dateien aus einem bestimmten Bereich des Dateisystems anzusprechen, können Files- und Directory-Abschnitte kombiniert werden. So verweigert zum Beispiel die folgende Konfiguration den Zugriff auf die Dateien /var/web/dir1/private.html, /var/web/dir1/subdir2/private.html, /var/web/dir1/subdir3/private.html sowie auf alle anderen Instanzen von private.html, die im Bereich des Verzeichnisses /var/web/dir1/ liegen.

<Directory /var/web/dir1>
<Files private.html>
Order allow,deny
Deny from all
</Files>
</Directory>
Webbereichs-Container

Die Location -Direktiven und ihre Match-Entsprechungen ändern dagegen die Konfiguration für Inhalte im Webbereich. Die folgende Konfiguration verhindert beispielsweise jeden URL-Pfad, der mit /private beginnt. Insbesondere betrifft er Anfragen nach http://yoursite.example.com/private, http://yoursite.example.com/private123 und http://yoursite.example.com/private/dir/file.html sowie andere Anfragen, die mit /private beginnen.

<Location /private>
Order Allow,Deny
Deny from all
</Location>

Eine Direktive aus dem Location -Abschnitt muss nichts mit dem Dateisystem zu tun haben. Das folgende Beispiel zeigt, wie eine bestimmte URL einem internen Apache-Handler des Moduls mod_status zugewiesen wird. Eine Datei mit der Bezeichnung server-status muss im Dateisystem nicht vorhanden sein.

<Location /server-status>
SetHandler server-status
</Location>
Jokerzeichen und reguläre Ausdrücke

Die Direktiven aus den Directory -, Files- und Location-Abschnitten können Jokerzeichen im C-Stil enthalten. Das Zeichen *stimmt mit jeder Zeichenfolge überein, das ?-Zeichen steht für ein einzelnes Zeichen und [seq] steht für jedes Zeichen aus seq. Der Schrägstrich (/) stimmt mit keinem Jokerzeichen überein, er muss explizit angegeben werden.

Werden noch anpassungsfähigere Vergleiche benötigt, gibt es für jeden Container eine Match-Entsprechung: DirectoryMatch, FilesMatch und LocationMatch. Sie lassen Perl-kompatible reguläre Ausdrücke bei Vergleichen zu. Im Abschnitt "Wie die Abschnitte vermischt werden" erfahren Sie, wie Abschnitte mit regulären Ausdrücken die Anwendung von Direktiven verändern.

Ein reiner Jokerzeichenabschnitt, der die Konfiguration aller Benutzerverzeichnisse ändert, könnte folgendermaßen aussehen:

<Directory /home/*/public_html>
Options Indexes
</Directory>

Mit Abschnitten mit regulären Ausdrücken kann der Zugriff auf viele Arten von Bilddateien auf einmal verwehrt werden:

<FilesMatch \.(?i:gif|jpe?g|png)$>
Order allow,deny
Deny from all
</FilesMatch>
Was wann verwendet wird

Die Entscheidung für Dateisystem- oder Webbereichs-Containern fällt relativ leicht. Werden Direktiven auf Objekte im Dateisystem angewendet, werden immer Directory- oder Files-Abschnitte benutzt. Werden Direktiven auf Objekte außerhalb des Dateisystems angewendet (wie zum Beispiel auf eine von einer Datenbank erzeugte Webseite), dann werden Location-Abschnitte benutzt.

Es ist wichtig, niemals einen Location-Abschnitt zu verwenden, wenn der Zugriff auf Objekte im Dateisystem eingeschränkt werden soll, weil viele unterschiedliche Webbereichpositionen (URLs) dem gleichen Bereich des Dateisystems zugeordnet sein können und die Einschränkungen umgangen werden können. Ein Beispiel::

<Location /dir/>
Order allow,deny
Deny from all
</Location>

Bei einer Anfrage nach http://yoursite.example.com/dir/ funktioniert das. Was geschieht aber, wenn das Dateisystem Groß- und Kleinschreibung unterscheidet? In dem Fall kann die Einschränkung durch Anforderung von http://yoursite.example.com/DIR/ leicht umgangen werden. Die Directory-Direktive wird dagegen auf jeden Inhalt aus diesem Bereich angewendet, unabhängig davon, welche Bezeichnung er hat. (Eine Ausnahme bilden Dateisystem-Links. Mit symbolischen Links kann das gleiche Verzeichnis an mehreren Positionen im Dateisystem positioniert werden. Die Directory-Direktive folgt dem symbolischen Link, ohne den Pfadnamen zurückzusetzen. Für die höchste Sicherheitsstufe sollten symbolische Links daher mit der entsprechenden Options-Direktive deaktiviert werden.)

Dateisysteme, bei denen Groß- und Kleinschreibung nicht unterschieden wird, sind aber nicht das einzige Problem. Es gibt viele Möglichkeiten, mehrere Webbereiche der gleichen Position im Dateisystem zuzuordnen. Deshalb sollte möglichst immer der Dateisystem-Container benutzt werden. Eine Ausnahme von dieser Regel gibt es allerdings. Die Lösung, Einschränkungen in einen <Location/>-Abschnitt zu setzen, ist absolut sicher, weil dieser Abschnitt unabhängig von der URL auf alle Anfragen angewendet wird.

Virtuelle Hosts

Der VirtualHost -Abschnitt enthält Direktiven für bestimmte Hosts. Das ist nützlich, wenn ein Rechner mehrere Hosts mit unterschiedlichen Konfigurationen beherbergt. Weitere Informationen finden Sie in der Dokumentation über virtuelle Hosts.

Proxy

Die Proxy- und ProxyMatch -Abschnitte enthalten Konfigurationsdirektiven, die nur für Sites gelten, auf die mit der angegebenen URL über den Proxy-Server des Moduls mod_proxy zugegriffen wird. Die folgende Konfiguration verhindert beispielsweise, dass über den Proxy-Server auf die Website cnn.com zugegriffen wird.

<Proxy http://cnn.com/*>
Order allow,deny
Deny from all
</Proxy>
Welche Direktiven sind zulässig?

Darüber, welche Direktiven in welchen Konfigurationsabschnitten zulässig sind, informieren die Hinweise zum Kontext der Direktive. Alles, was in Directory-Abschnitten zulässig ist, ist syntaktisch auch in DirectoryMatch-, Files-, FilesMatch-, Location-, LocationMatch-, Proxy- und ProxyMatch -Abschnitten erlaubt. Allerdings mit einigen Ausnahmen:

  • Die AllowOverride-Direktive funktioniert nur in Directory -Abschnitten.
  • Die Optionen FollowSymLinks und SymLinksIfOwnerMatch funktionieren nur in Directory-Abschnitten oder in .htaccess-Dateien.
  • Die Options-Direktive kann nicht in Files- und FilesMatch-Abschnitten benutzt werden.
Wie die Abschnitte vermischt werden

Die Konfigurationsabschnitte werden in einer ganz bestimmten Reihenfolge angewendet. Da es wichtige Auswirkungen haben kann, wie Konfigurationsdirektiven interpretiert werden, ist es wichtig zu wissen, wie das funktioniert.

Die Reihenfolge ist folgende:

  1. Directory (mit Ausnahme regulärer Ausdrücke) und .htaccess simultan (falls zulässig wird .htaccess überschrieben Directory)
  2. DirectoryMatch (und <Directory ~>)
  3. Files und FilesMatch simultan
  4. Location und LocationMatch simultan

Getrennt vom Directory-Abschnitt, wird jede Gruppe in der Reihenfolge ihres Auftretens in den Konfigurationsdateien bearbeitet. Die Directory-Abschnitte (Gruppe 1 oben) werden beginnend mit der kürzesten Komponente bearbeitet. <Directory /var/web/dir> wird beispielsweise vor <Directory /var/web/dir/subdir> bearbeitet. Gelten mehrere Directory-Abschnitte für das gleiche Verzeichnis, werden sie in der Reihenfolge der Konfigurationsdatei bearbeitet. Konfigurationen über die Include-Direktive werden behandelt, als befänden sie sich in der einschließenden Datei an der Position der Include-Direktive.

Abschnitte innerhalb von VirtualHost-Abschnitten werden nach den entsprechenden Abschnitten außerhalb der virtuellen Hostdefinition behandelt. Auf diese Weise können virtuelle Hosts die Hauptserverkonfiguration überschreiben.

Wird die Anfrage von mod_proxy bedient, nimmt der Proxy-Abschnitt in der Verarbeitungsreihenfolge die Stelle des Directory-Abschnitts ein.

Spätere Abschnitte überschreiben frühere.

Technischer Hinweis Vor der Umwandlungsphase (in der Aliases und DocumentRoots für die Zuordnung von URLs benutzt werden) wird eine <Location>/ <LocationMatch>-Sequenz durchgeführt. Die Ergebnisse dieser Sequenz werden vollständig verworfen, nachdem die Umwandlungsphase abgeschlossen wurde.
Beispiele

Es folgt ein konstruiertes Beispiel, das die Reihenfolge der Vermischung zeigt. Werden alle Direktiven für die Anfrage angewendet, geschieht dies in der Reihenfolge A > B > C > D > E.

<Location />
E
</Location>

<Files f.html>
D
</Files>

<VirtualHost *>
<Directory /a/b>
B
</Directory>
</VirtualHost>

<DirectoryMatch "^.*b$">
C
</DirectoryMatch>

<Directory /a/b>
A
</Directory>

In dem nächsten, etwas konkreteren Beispiel befinden sich zwar alle Zugriffsbeschränkungen in Directory-Abschnitten, der Location-Abschnitt wird aber als letzter ausgewertet und erlaubt uneingeschränkten Zugriff auf den Server. Beim Vermischen ist die Reihenfolge also äußerst wichtig!

<Location />
Order deny,allow
Allow from all
</Location>

# Hoppla! Dieser <Directory>-Abschnitt bleibt wirkungslos
<Directory />
Order allow,deny
Allow from all
Deny from badguy.example.com
</Directory>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to