Apache/HTTP/Konfiguration/Abschnitte: Unterschied zwischen den Versionen
K Dirkwagner verschob die Seite Kategorie:Apache/HTTP/Konfiguration/Abschnitte nach Apache/HTTP/Konfiguration/Abschnitte, ohne dabei eine Weiterleitung anzulegen |
Keine Bearbeitungszusammenfassung |
||
| Zeile 3: | Zeile 3: | ||
* Dieses Dokument beschreibt, wie man Konfigurationsabschnittscontainer oder <tt>.htaccess</tt>-Dateien verwendet, um den Geltungsbereich anderer Konfigurationsdirektiven zu ändern | * Dieses Dokument beschreibt, wie man Konfigurationsabschnittscontainer oder <tt>.htaccess</tt>-Dateien verwendet, um den Geltungsbereich anderer Konfigurationsdirektiven zu ändern | ||
== | == Container für Konfigurationsabschnitte == | ||
Verwandte Module Verwandte | {| class="wikitable float" | ||
! Verwandte Module !! Verwandte Anweisungen | |||
|- | |||
| | |||
* [https://httpd.apache.org/docs/2.4/mod/core.html core] | * [https://httpd.apache.org/docs/2.4/mod/core.html core] | ||
* [https://httpd.apache.org/docs/2.4/mod/mod_version.html mod_version] | * [https://httpd.apache.org/docs/2.4/mod/mod_version.html mod_version] | ||
* [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html mod_proxy] | * [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html mod_proxy] | ||
| | |||
* [https://httpd.apache.org/docs/2.4/mod/core.html#directory <Directory>] | * [https://httpd.apache.org/docs/2.4/mod/core.html#directory <Directory>] | ||
* [https://httpd.apache.org/docs/2.4/mod/core.html#directorymatch <DirectoryMatch>] | * [https://httpd.apache.org/docs/2.4/mod/core.html#directorymatch <DirectoryMatch>] | ||
| Zeile 20: | Zeile 23: | ||
* [https://httpd.apache.org/docs/2.4/mod/core.html#locationmatch <LocationMatch>] | * [https://httpd.apache.org/docs/2.4/mod/core.html#locationmatch <LocationMatch>] | ||
* [https://httpd.apache.org/docs/2.4/mod/mod_md.html#mdomainsetsection <MDomainSet>] | * [https://httpd.apache.org/docs/2.4/mod/mod_md.html#mdomainsetsection <MDomainSet>] | ||
* [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxy <Proxy>] | |||
* [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxymatch <ProxyMatch>] | |||
* [https://httpd.apache.org/docs/2.4/mod/core.html#virtualhost <VirtualHost>] | |||
[https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxy <Proxy>] | |||
[https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxymatch <ProxyMatch>] | |||
Es gibt zwei grundlegende Containertypen | Es gibt zwei grundlegende Containertypen | ||
| Zeile 39: | Zeile 37: | ||
* Bei der folgenden Konfiguration werden beispielsweise alle Anfragen nur dann an eine andere Website umgeleitet, wenn der Server mit <tt>httpd -DClosedForNow</tt> gestartet wird: | * Bei der folgenden Konfiguration werden beispielsweise alle Anfragen nur dann an eine andere Website umgeleitet, wenn der Server mit <tt>httpd -DClosedForNow</tt> gestartet wird: | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<IfDefine ClosedForNow> | |||
Redirect „/“ „http://otherserver.example.com/“ | Redirect „/“ „http://otherserver.example.com/“ | ||
</IfDefine> | |||
</syntaxhighlight> | |||
Die [https://httpd.apache.org/docs/2.4/mod/core.html#ifmodule <IfModule>]-Direktive ist sehr ähnlich, außer dass sie Direktiven enthält, die nur angewendet werden, wenn ein bestimmtes Modul im Server verfügbar ist | Die [https://httpd.apache.org/docs/2.4/mod/core.html#ifmodule <IfModule>]-Direktive ist sehr ähnlich, außer dass sie Direktiven enthält, die nur angewendet werden, wenn ein bestimmtes Modul im Server verfügbar ist | ||
| Zeile 49: | Zeile 49: | ||
Im folgenden Beispiel wird die [https://httpd.apache.org/docs/2.4/mod/mod_mime_magic.html#mimemagicfile MimeMagicFile]-Anweisung nur angewendet, wenn [https://httpd.apache.org/docs/2.4/mod/mod_mime_magic.html mod_mime_magic] verfügbar ist | Im folgenden Beispiel wird die [https://httpd.apache.org/docs/2.4/mod/mod_mime_magic.html#mimemagicfile MimeMagicFile]-Anweisung nur angewendet, wenn [https://httpd.apache.org/docs/2.4/mod/mod_mime_magic.html mod_mime_magic] verfügbar ist | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<IfModule mod_mime_magic.c> | |||
MimeMagicFile „conf/magic“ | MimeMagicFile „conf/magic“ | ||
</IfModule> | |||
</syntaxhighlight> | |||
Die [https://httpd.apache.org/docs/2.4/mod/mod_version.html#ifversion <IfVersion>]-Direktive ist [https://httpd.apache.org/docs/2.4/mod/core.html#ifdefine <IfDefine>] und [https://httpd.apache.org/docs/2.4/mod/core.html#ifmodule <IfModule>] sehr ähnlich, außer dass sie Direktiven enthält, die nur angewendet werden, wenn eine bestimmte Version des Servers ausgeführt wird | Die [https://httpd.apache.org/docs/2.4/mod/mod_version.html#ifversion <IfVersion>]-Direktive ist [https://httpd.apache.org/docs/2.4/mod/core.html#ifdefine <IfDefine>] und [https://httpd.apache.org/docs/2.4/mod/core.html#ifmodule <IfModule>] sehr ähnlich, außer dass sie Direktiven enthält, die nur angewendet werden, wenn eine bestimmte Version des Servers ausgeführt wird | ||
* Dieses Modul ist für die Verwendung in Testsuiten und großen Netzwerken konzipiert, die mit verschiedenen httpd-Versionen und unterschiedlichen Konfigurationen umgehen müssen | * Dieses Modul ist für die Verwendung in Testsuiten und großen Netzwerken konzipiert, die mit verschiedenen httpd-Versionen und unterschiedlichen Konfigurationen umgehen müssen | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<IfVersion >= 2.4> | |||
# dies geschieht nur in Versionen größer oder | |||
# gleich 2.4.0. | |||
</IfVersion> | |||
</syntaxhighlight> | |||
[https://httpd.apache.org/docs/2.4/mod/core.html#ifdefine <IfDefine>], [https://httpd.apache.org/docs/2.4/mod/core.html#ifmodule <IfModule>] und [https://httpd.apache.org/docs/2.4/mod/mod_version.html#ifversion <IfVersion>] können negative Bedingungen anwenden, indem sie ihrem Test ein „!“ voranstellen | [https://httpd.apache.org/docs/2.4/mod/core.html#ifdefine <IfDefine>], [https://httpd.apache.org/docs/2.4/mod/core.html#ifmodule <IfModule>] und [https://httpd.apache.org/docs/2.4/mod/mod_version.html#ifversion <IfVersion>] können negative Bedingungen anwenden, indem sie ihrem Test ein „!“ voranstellen | ||
| Zeile 78: | Zeile 81: | ||
* Der gleiche Effekt kann mit [https://httpd.apache.org/docs/2.4/howto/htaccess.html .htaccess-Dateien] erzielt werden | * Der gleiche Effekt kann mit [https://httpd.apache.org/docs/2.4/howto/htaccess.html .htaccess-Dateien] erzielt werden | ||
* In der folgenden Konfiguration werden beispielsweise Verzeichnisindizes für das Verzeichnis <tt>/var/web/dir1</tt> und alle Unterverzeichnisse aktiviert | * In der folgenden Konfiguration werden beispielsweise Verzeichnisindizes für das Verzeichnis <tt>/var/web/dir1</tt> und alle Unterverzeichnisse aktiviert | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Directory „/var/web/dir1“> | |||
Options +Indexes | Options +Indexes | ||
</Directory> | |||
</syntaxhighlight> | |||
In einem [https://httpd.apache.org/docs/2.4/mod/core.html#files <Files>]-Abschnitt enthaltene Anweisungen gelten für jede Datei mit dem angegebenen Namen, unabhängig davon, in welchem Verzeichnis sie sich befindet | In einem [https://httpd.apache.org/docs/2.4/mod/core.html#files <Files>]-Abschnitt enthaltene Anweisungen gelten für jede Datei mit dem angegebenen Namen, unabhängig davon, in welchem Verzeichnis sie sich befindet | ||
* So verweigern | * So verweigern etwa die folgenden Konfigurationsanweisungen, wenn sie im Hauptabschnitt der Konfigurationsdatei platziert werden, den Zugriff auf jede Datei mit dem Namen <tt>private.html</tt>, unabhängig davon, wo sie sich befindet | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Files „private.html“> | |||
Require all denied | Require all denied | ||
</Files> | |||
</syntaxhighlight> | |||
Um Dateien zu adressieren, die sich in einem bestimmten Teil des Dateisystems befinden, können die Abschnitte [https://httpd.apache.org/docs/2.4/mod/core.html#files <Files>] und [https://httpd.apache.org/docs/2.4/mod/core.html#directory <Directory>] kombiniert werden | Um Dateien zu adressieren, die sich in einem bestimmten Teil des Dateisystems befinden, können die Abschnitte [https://httpd.apache.org/docs/2.4/mod/core.html#files <Files>] und [https://httpd.apache.org/docs/2.4/mod/core.html#directory <Directory>] kombiniert werden | ||
* Beispielsweise wird mit der folgenden Konfiguration der Zugriff auf <tt>/var/web/dir1/private.html</tt>, <tt>/var/web/dir1/subdir2/private.html</tt>, <tt>/var/web/dir1/subdir3/private.html</tt>und alle anderen Instanzen von <tt>private.html</tt>, die sich im Verzeichnis <tt>/var/web/dir1/</tt> befinden, | * Beispielsweise wird mit der folgenden Konfiguration der Zugriff auf <tt>/var/web/dir1/private.html</tt>, <tt>/var/web/dir1/subdir2/private.html</tt>, <tt>/var/web/dir1/subdir3/private.html</tt>und alle anderen Instanzen von <tt>private.html</tt>, die sich im Verzeichnis <tt>/var/web/dir1/</tt> befinden, | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Directory „/var/web/dir1“> | |||
<Files „private.html“> | <Files „private.html“> | ||
Require all denied | |||
</Files> | </Files> | ||
</Directory> | |||
</syntaxhighlight> | |||
=== Webspace-Container === | === Webspace-Container === | ||
| Zeile 103: | Zeile 109: | ||
* Die folgende Konfiguration verhindert beispielsweise den Zugriff auf alle URL-Pfade, die mit /private beginnen | * Die folgende Konfiguration verhindert beispielsweise den Zugriff auf alle URL-Pfade, die mit /private beginnen | ||
* Dies gilt insbesondere für Anfragen für <tt>http://yoursite.example.com/private</tt>, <tt>http://yoursite.example.com/private123</tt>und <tt>http://yoursite.example.com/private/dir/file.html</tt> sowie für alle anderen Anfragen, die mit der Zeichenfolge <tt>/private</tt> beginnen | * Dies gilt insbesondere für Anfragen für <tt>http://yoursite.example.com/private</tt>, <tt>http://yoursite.example.com/private123</tt>und <tt>http://yoursite.example.com/private/dir/file.html</tt> sowie für alle anderen Anfragen, die mit der Zeichenfolge <tt>/private</tt> beginnen | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<LocationMatch „^/private“> | <LocationMatch „^/private“> | ||
Alle Anforderungen ablehnen | Alle Anforderungen ablehnen | ||
</LocationMatch> | </LocationMatch> | ||
</syntaxhighlight> | |||
Die [https://httpd.apache.org/docs/2.4/mod/core.html#location <Location>]-Anweisung muss nichts mit dem Dateisystem zu tun haben | Die [https://httpd.apache.org/docs/2.4/mod/core.html#location <Location>]-Anweisung muss nichts mit dem Dateisystem zu tun haben | ||
* Das folgende Beispiel zeigt beispielsweise, wie eine bestimmte URL einem internen Apache HTTP Server-Handler zugeordnet wird, der von [https://httpd.apache.org/docs/2.4/mod/mod_status.html mod_status] bereitgestellt wird | * Das folgende Beispiel zeigt beispielsweise, wie eine bestimmte URL einem internen Apache HTTP Server-Handler zugeordnet wird, der von [https://httpd.apache.org/docs/2.4/mod/mod_status.html mod_status] bereitgestellt wird | ||
* Im Dateisystem muss keine Datei namens <tt>server-status</tt> vorhanden sein | * Im Dateisystem muss keine Datei namens <tt>server-status</tt> vorhanden sein | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Location „/server-status“> | <Location „/server-status“> | ||
SetHandler server-status | SetHandler server-status | ||
</Location> | </Location> | ||
</syntaxhighlight> | |||
=== Überlappender Webspace === | === Überlappender Webspace === | ||
Um zwei sich überlappende URLs zu haben, muss man die Reihenfolge berücksichtigen, in der bestimmte Abschnitte oder Anweisungen ausgewertet werden | Um zwei sich überlappende URLs zu haben, muss man die Reihenfolge berücksichtigen, in der bestimmte Abschnitte oder Anweisungen ausgewertet werden | ||
* Für [https://httpd.apache.org/docs/2.4/mod/core.html#location <Location>] wäre dies: | * Für [https://httpd.apache.org/docs/2.4/mod/core.html#location <Location>] wäre dies: | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Location „/foo“> | <Location „/foo“> | ||
</Location> | </Location> | ||
<Location „/foo/bar“> | <Location „/foo/bar“> | ||
</Location> | </Location> | ||
</syntaxhighlight> | |||
[https://httpd.apache.org/docs/2.4/mod/mod_alias.html#alias <Alias>]es hingegen werden umgekehrt zugeordnet: | [https://httpd.apache.org/docs/2.4/mod/mod_alias.html#alias <Alias>]es hingegen werden umgekehrt zugeordnet: | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
Alias „/foo/bar“ „/srv/www/uncommon/bar“ | Alias „/foo/bar“ „/srv/www/uncommon/bar“ | ||
Alias „/foo“ „/srv/www/common/foo“ | Alias „/foo“ „/srv/www/common/foo“ | ||
</syntaxhighlight> | |||
Das Gleiche gilt für die [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass ProxyPass]-Anweisungen: | Das Gleiche gilt für die [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass ProxyPass]-Anweisungen: | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
ProxyPass „/special-area“ „http://special.example.com“ smax=5 max=10 | ProxyPass „/special-area“ „http://special.example.com“ smax=5 max=10 | ||
ProxyPass „/“ „balancer://mycluster/“ stickysession=JSESSIONID|jsessionid nofailover=On | ProxyPass „/“ „balancer://mycluster/“ stickysession=JSESSIONID|jsessionid nofailover=On | ||
</syntaxhighlight> | |||
=== Platzhalter und reguläre Ausdrücke === | === Platzhalter und reguläre Ausdrücke === | ||
| Zeile 144: | Zeile 155: | ||
Ein Nicht-Regex-Platzhalterabschnitt, der die Konfiguration aller Benutzerverzeichnisse ändert, könnte wie folgt aussehen: | Ein Nicht-Regex-Platzhalterabschnitt, der die Konfiguration aller Benutzerverzeichnisse ändert, könnte wie folgt aussehen: | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Directory „/home/*/public_html“> | <Directory „/home/*/public_html“> | ||
Options Indexes | Options Indexes | ||
</Directory> | </Directory> | ||
</syntaxhighlight> | |||
Mit Regex-Abschnitten können wir den Zugriff auf viele Arten von Bilddateien gleichzeitig verweigern: | Mit Regex-Abschnitten können wir den Zugriff auf viele Arten von Bilddateien gleichzeitig verweigern: | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<FilesMatch „\.(?i:gif|jpe?g|png)$“> | <FilesMatch „\.(?i:gif|jpe?g|png)$“> | ||
Require all denied | Require all denied | ||
</FilesMatch> | </FilesMatch> | ||
</syntaxhighlight> | |||
Reguläre Ausdrücke, die '''benannte Gruppen und Rückverweise''' enthalten, werden der Umgebung mit dem entsprechenden Namen in Großbuchstaben hinzugefügt | Reguläre Ausdrücke, die '''benannte Gruppen und Rückverweise''' enthalten, werden der Umgebung mit dem entsprechenden Namen in Großbuchstaben hinzugefügt | ||
* Dadurch können Elemente von Dateinamenpfaden und URLs in [https://httpd.apache.org/docs/2.4/expr.html Ausdrücken] und Modulen wie [https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html mod_rewrite] referenziert werden | * Dadurch können Elemente von Dateinamenpfaden und URLs in [https://httpd.apache.org/docs/2.4/expr.html Ausdrücken] und Modulen wie [https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html mod_rewrite] referenziert werden | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<DirectoryMatch „^/var/www/combined/(?<SITENAME>[^/]+)“> | <DirectoryMatch „^/var/www/combined/(?<SITENAME>[^/]+)“> | ||
Require ldap-group „cn=%{env:MATCH_SITENAME},ou=combined,o=Example“ | Require ldap-group „cn=%{env:MATCH_SITENAME},ou=combined,o=Example“ | ||
</DirectoryMatch> | </DirectoryMatch> | ||
</syntaxhighlight> | |||
=== Boolesche Ausdrücke === | === Boolesche Ausdrücke === | ||
Die [https://httpd.apache.org/docs/2.4/mod/core.html#if <If>]-Direktive ändert die Konfiguration in Abhängigkeit von einer Bedingung, die durch einen booleschen Ausdruck ausgedrückt werden kann | Die [https://httpd.apache.org/docs/2.4/mod/core.html#if <If>]-Direktive ändert die Konfiguration in Abhängigkeit von einer Bedingung, die durch einen booleschen Ausdruck ausgedrückt werden kann | ||
* Die folgende Konfiguration verweigert beispielsweise den Zugriff, wenn der HTTP-Referer-Header nicht mit „http://www.example.com/“ beginnt | * Die folgende Konfiguration verweigert beispielsweise den Zugriff, wenn der HTTP-Referer-Header nicht mit „http://www.example.com/“ beginnt | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<If „!(%{HTTP_REFERER} -strmatch ‚http://www.example.com/*‘)“> | <If „!(%{HTTP_REFERER} -strmatch ‚http://www.example.com/*‘)“> | ||
Alle verweigert | Alle verweigert | ||
</If> | </If> | ||
</syntaxhighlight> | |||
=== Was ist zu verwenden? Bei der === | === Was ist zu verwenden? Bei der === | ||
| Zeile 180: | Zeile 195: | ||
* Dies liegt daran, dass viele verschiedene Webspace-Speicherorte (URLs) demselben Dateisystem-Speicherort zugeordnet werden können, wodurch Ihre Einschränkungen umgangen werden können | * Dies liegt daran, dass viele verschiedene Webspace-Speicherorte (URLs) demselben Dateisystem-Speicherort zugeordnet werden können, wodurch Ihre Einschränkungen umgangen werden können | ||
* Betrachten Sie beispielsweise die folgende Konfiguration: | * Betrachten Sie beispielsweise die folgende Konfiguration: | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Location „/dir/“> | <Location „/dir/“> | ||
Require all denied | Require all denied | ||
</Location> | </Location> | ||
</syntaxhighlight> | |||
Dies funktioniert einwandfrei, wenn die Anfrage für <tt>http://yoursite.example.com/dir/</tt> erfolgt | Dies funktioniert einwandfrei, wenn die Anfrage für <tt>http://yoursite.example.com/dir/</tt> erfolgt | ||
| Zeile 213: | Zeile 229: | ||
Die [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxy <Proxy>]- und [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxymatch <ProxyMatch>]-Container wenden eingeschlossene Konfigurationsanweisungen nur auf Sites an, auf die über den [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html mod_proxy]-Proxyserver zugegriffen wird und die mit der angegebenen URL übereinstimmen | Die [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxy <Proxy>]- und [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxymatch <ProxyMatch>]-Container wenden eingeschlossene Konfigurationsanweisungen nur auf Sites an, auf die über den [https://httpd.apache.org/docs/2.4/mod/mod_proxy.html mod_proxy]-Proxyserver zugegriffen wird und die mit der angegebenen URL übereinstimmen | ||
* Die folgende Konfiguration erlaubt beispielsweise nur einer Teilmenge von Clients den Zugriff auf die <tt>www.example.com</tt> Website über den Proxyserver: | * Die folgende Konfiguration erlaubt beispielsweise nur einer Teilmenge von Clients den Zugriff auf die <tt>www.example.com</tt> Website über den Proxyserver: | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Proxy „http://www.example.com/*“> | <Proxy „http://www.example.com/*“> | ||
Require host yournetwork.example.com | Require host yournetwork.example.com | ||
</Proxy> | </Proxy> | ||
</syntaxhighlight> | |||
== Welche Anweisungen sind zulässig? == | == Welche Anweisungen sind zulässig? == | ||
| Zeile 269: | Zeile 286: | ||
* Die folgende Konfiguration verwendet die [https://httpd.apache.org/docs/2.4/mod/mod_headers.html#header Header]-Direktive von [https://httpd.apache.org/docs/2.4/mod/mod_headers.html mod_headers], um einen bestimmten HTTP-Header festzulegen | * Die folgende Konfiguration verwendet die [https://httpd.apache.org/docs/2.4/mod/mod_headers.html#header Header]-Direktive von [https://httpd.apache.org/docs/2.4/mod/mod_headers.html mod_headers], um einen bestimmten HTTP-Header festzulegen | ||
* Welchen Wert setzt httpd im <tt>CustomHeaderName</tt>-Header für eine Anfrage an <tt>/example/index.html</tt> ? | * Welchen Wert setzt httpd im <tt>CustomHeaderName</tt>-Header für eine Anfrage an <tt>/example/index.html</tt> ? | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Directory „/“> | <Directory „/“> | ||
Header set CustomHeaderName one | Header set CustomHeaderName one | ||
| Zeile 276: | Zeile 293: | ||
</FilesMatch> | </FilesMatch> | ||
</Directory> | </Directory> | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Directory „/example“> | <Directory „/example“> | ||
Header set CustomHeaderName two | Header set CustomHeaderName two | ||
</Directory> | </Directory> | ||
</syntaxhighlight> | |||
* <tt>Directory</tt> „/“ entspricht und eine Erstkonfiguration zum Festlegen des <tt>CustomHeaderName</tt> Headers mit dem Wert <tt>eins</tt> erstellt wird | * <tt>Directory</tt> „/“ entspricht und eine Erstkonfiguration zum Festlegen des <tt>CustomHeaderName</tt> Headers mit dem Wert <tt>eins</tt> erstellt wird | ||
* <tt>Directory</tt> „/example“ entspricht und da [https://httpd.apache.org/docs/2.4/mod/mod_headers.html mod_headers] in seinem Code angibt, dass es im Falle einer Zusammenführung überschrieben werden soll, wird eine neue Konfiguration erstellt, um den <tt>CustomHeaderName</tt> Header mit dem Wert <tt>zwei</tt>festzulegen | * <tt>Directory</tt> „/example“ entspricht und da [https://httpd.apache.org/docs/2.4/mod/mod_headers.html mod_headers] in seinem Code angibt, dass es im Falle einer Zusammenführung überschrieben werden soll, wird eine neue Konfiguration erstellt, um den <tt>CustomHeaderName</tt> Header mit dem Wert <tt>zwei</tt>festzulegen | ||
| Zeile 294: | Zeile 313: | ||
Nachfolgend finden Sie ein fiktives Beispiel, das die Reihenfolge der Zusammenführung veranschaulichen soll | Nachfolgend finden Sie ein fiktives Beispiel, das die Reihenfolge der Zusammenführung veranschaulichen soll | ||
* Angenommen, sie alle gelten für die Anfrage, dann werden die Direktiven in diesem Beispiel in der Reihenfolge A > B > C > D > E angewendet | * Angenommen, sie alle gelten für die Anfrage, dann werden die Direktiven in diesem Beispiel in der Reihenfolge A > B > C > D > E angewendet | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Location „/“> | <Location „/“> | ||
E | E | ||
| Zeile 312: | Zeile 331: | ||
A | A | ||
</Directory> | </Directory> | ||
</syntaxhighlight> | |||
Ein konkreteres Beispiel ist das folgende | Ein konkreteres Beispiel ist das folgende | ||
* Unabhängig von Zugriffsbeschränkungen in [https://httpd.apache.org/docs/2.4/mod/core.html#directory <Directory>]-Abschnitten wird der [https://httpd.apache.org/docs/2.4/mod/core.html#location <Location>]-Abschnitt zuletzt ausgewertet und ermöglicht uneingeschränkten Zugriff auf den Server | * Unabhängig von Zugriffsbeschränkungen in [https://httpd.apache.org/docs/2.4/mod/core.html#directory <Directory>]-Abschnitten wird der [https://httpd.apache.org/docs/2.4/mod/core.html#location <Location>]-Abschnitt zuletzt ausgewertet und ermöglicht uneingeschränkten Zugriff auf den Server | ||
* Mit anderen Worten: Die Reihenfolge der Zusammenführung ist wichtig, seien Sie also vorsichtig! | * Mit anderen Worten: Die Reihenfolge der Zusammenführung ist wichtig, seien Sie also vorsichtig! | ||
<syntaxhighlight lang="apache" highlight="0" line> | |||
<Location „/“> | <Location „/“> | ||
Require all granted | Require all granted | ||
| Zeile 327: | Zeile 346: | ||
</RequireAll> | </RequireAll> | ||
</Directory> | </Directory> | ||
</syntaxhighlight> | |||
Version vom 26. März 2025, 17:10 Uhr
Konfigurationsabschnitte
Direktiven in den Konfigurationsdateien können für den gesamten Server gelten oder auf bestimmte Verzeichnisse, Dateien, Hosts oder URLs beschränkt sein
- Dieses Dokument beschreibt, wie man Konfigurationsabschnittscontainer oder .htaccess-Dateien verwendet, um den Geltungsbereich anderer Konfigurationsdirektiven zu ändern
Container für Konfigurationsabschnitte
| Verwandte Module | Verwandte Anweisungen |
|---|---|
Es gibt zwei grundlegende Containertypen
Die <IfDefine>-Direktive umschließt Direktiven, die nur angewendet werden, wenn ein entsprechender Parameter in der httpd-Befehlszeile definiert ist
<IfDefine ClosedForNow>
Redirect „/“ „http://otherserver.example.com/“
</IfDefine>
Die <IfModule>-Direktive ist sehr ähnlich, außer dass sie Direktiven enthält, die nur angewendet werden, wenn ein bestimmtes Modul im Server verfügbar ist
Im folgenden Beispiel wird die MimeMagicFile-Anweisung nur angewendet, wenn mod_mime_magic verfügbar ist <IfModule mod_mime_magic.c>
MimeMagicFile „conf/magic“
</IfModule>
Die <IfVersion>-Direktive ist <IfDefine> und <IfModule> sehr ähnlich, außer dass sie Direktiven enthält, die nur angewendet werden, wenn eine bestimmte Version des Servers ausgeführt wird
<IfVersion >= 2.4>
# dies geschieht nur in Versionen größer oder
# gleich 2.4.0.
</IfVersion>
<IfDefine>, <IfModule> und <IfVersion> können negative Bedingungen anwenden, indem sie ihrem Test ein „!“ voranstellen
Dateisystem, Webspace und boolesche AusdrückeDie am häufigsten verwendeten Konfigurationsabschnittscontainer sind diejenigen, die die Konfiguration bestimmter Stellen im Dateisystem oder Webspace ändern
Dateisystem-ContainerDie <Directory>- und <Files>-Direktiven sowie ihre Gegenstücke „regex“ wenden Direktiven auf Teile des Dateisystems an
<Directory „/var/web/dir1“>
Options +Indexes
</Directory>
In einem <Files>-Abschnitt enthaltene Anweisungen gelten für jede Datei mit dem angegebenen Namen, unabhängig davon, in welchem Verzeichnis sie sich befindet
<Files „private.html“>
Require all denied
</Files>
Um Dateien zu adressieren, die sich in einem bestimmten Teil des Dateisystems befinden, können die Abschnitte <Files> und <Directory> kombiniert werden
<Directory „/var/web/dir1“>
<Files „private.html“>
Require all denied
</Files>
</Directory>
Webspace-ContainerDie <Location>-Anweisung und ihr Gegenstück, der Reguläre Ausdruck, ändern dagegen die Konfiguration für Inhalte im Webspace
<LocationMatch „^/private“>
Alle Anforderungen ablehnen
</LocationMatch>
Die <Location>-Anweisung muss nichts mit dem Dateisystem zu tun haben
<Location „/server-status“>
SetHandler server-status
</Location>
Überlappender WebspaceUm zwei sich überlappende URLs zu haben, muss man die Reihenfolge berücksichtigen, in der bestimmte Abschnitte oder Anweisungen ausgewertet werden
<Location „/foo“>
</Location>
<Location „/foo/bar“>
</Location>
<Alias>es hingegen werden umgekehrt zugeordnet: Alias „/foo/bar“ „/srv/www/uncommon/bar“
Alias „/foo“ „/srv/www/common/foo“
Das Gleiche gilt für die ProxyPass-Anweisungen: ProxyPass „/special-area“ „http://special.example.com“ smax=5 max=10
ProxyPass „/“ „balancer://mycluster/“ stickysession=JSESSIONID|jsessionid nofailover=On
Platzhalter und reguläre AusdrückeDie Anweisungen <Directory>, <Files> und <Location> können jeweils Shell-artige Platzhalterzeichen wie in fnmatch aus der C-Standardbibliothek verwenden
Wenn noch flexiblere Übereinstimmungen erforderlich sind, verfügt jeder Container über ein Gegenstück zu regulären Ausdrücken (regex) <DirectoryMatch>, <FilesMatch> und <LocationMatch>, die die Verwendung von perl-kompatiblen regulären Ausdrücken bei der Auswahl der Übereinstimmungen ermöglichen
Ein Nicht-Regex-Platzhalterabschnitt, der die Konfiguration aller Benutzerverzeichnisse ändert, könnte wie folgt aussehen: <Directory „/home/*/public_html“>
Options Indexes
</Directory>
Mit Regex-Abschnitten können wir den Zugriff auf viele Arten von Bilddateien gleichzeitig verweigern: <FilesMatch „\.(?i:gif|jpe?g|png)$“>
Require all denied
</FilesMatch>
Reguläre Ausdrücke, die benannte Gruppen und Rückverweise enthalten, werden der Umgebung mit dem entsprechenden Namen in Großbuchstaben hinzugefügt
<DirectoryMatch „^/var/www/combined/(?<SITENAME>[^/]+)“>
Require ldap-group „cn=%{env:MATCH_SITENAME},ou=combined,o=Example“
</DirectoryMatch>
Boolesche AusdrückeDie <If>-Direktive ändert die Konfiguration in Abhängigkeit von einer Bedingung, die durch einen booleschen Ausdruck ausgedrückt werden kann
<If „!(%{HTTP_REFERER} -strmatch ‚http://www.example.com/*‘)“>
Alle verweigert
</If>
Was ist zu verwenden? Bei derDie Entscheidung zwischen Dateisystem-Containern und Webspace-Containern ist eigentlich ganz einfach
Es ist wichtig, niemals <Location> zu verwenden, wenn Sie versuchen, den Zugriff auf Objekte im Dateisystem einzuschränken
<Location „/dir/“>
Require all denied
</Location>
Dies funktioniert einwandfrei, wenn die Anfrage für http://yoursite.example.com/dir/ erfolgt
Wenn Sie vielleicht denken, dass dies alles nicht auf Sie zutrifft, weil Sie ein Dateisystem verwenden, bei dem zwischen Groß- und Kleinschreibung unterschieden wird, denken Sie daran, dass es viele andere Möglichkeiten gibt, mehrere Webspace-Speicherorte demselben Dateisystem-Speicherort zuzuordnen
Verschachtelung von AbschnittenEinige Abschnittstypen können in andere Abschnittstypen verschachtelt werden
Verschachtelte Abschnitte werden nach nicht verschachtelten Abschnitten desselben Typs zusammengeführt Virtuelle HostsDer <VirtualHost>-Container enthält Anweisungen, die für bestimmte Hosts gelten
ProxyDie <Proxy>- und <ProxyMatch>-Container wenden eingeschlossene Konfigurationsanweisungen nur auf Sites an, auf die über den mod_proxy-Proxyserver zugegriffen wird und die mit der angegebenen URL übereinstimmen
<Proxy „http://www.example.com/*“>
Require host yournetwork.example.com
</Proxy>
Welche Anweisungen sind zulässig?Um herauszufinden, welche Anweisungen in welchen Konfigurationsabschnitten zulässig sind, überprüfen Sie den Kontext der Anweisung
Wie die Abschnitte zusammengeführt werdenDie Konfigurationsabschnitte werden in einer ganz bestimmten Reihenfolge angewendet
Die Reihenfolge der Zusammenführung ist:# <Directory> (außer reguläre Ausdrücke) und .htaccess werden gleichzeitig ausgeführt (wobei .htaccess, falls zulässig, <Directory> überschreibt)
Einige wichtige Anmerkungen:* Abgesehen von <Directory> werden die Abschnitte innerhalb jeder Gruppe in der Reihenfolge verarbeitet, in der sie in den Konfigurationsdateien erscheinen
Technischer HinweisEs gibt tatsächlich eine <Location>/<LocationMatch> Sequenz, die direkt vor der Namensübersetzungsphase ausgeführt wird (in der Aliases und DocumentRoots verwendet werden, um URLs Dateinamen zuzuordnen)
Beziehung zwischen Modulen und KonfigurationsabschnittenEine Frage, die sich oft stellt, nachdem man gelesen hat, wie Konfigurationsabschnitte zusammengeführt werden, bezieht sich darauf, wie und wann Anweisungen bestimmter Module wie mod_rewrite verarbeitet werden
Zur Laufzeit durchläuft der Kern von httpd die definierten Konfigurationsabschnitte in der oben beschriebenen Reihenfolge, um festzustellen, welche für die aktuelle Anfrage gelten
Nach dem oben genannten Schritt beginnt die „eigentliche“ Verarbeitung der HTTP-Anfrage: Jedes Modul hat die Möglichkeit, ausgeführt zu werden und beliebige Aufgaben auszuführen
Ein Beispiel kann helfen, den gesamten Prozess zu veranschaulichen
<Directory „/“>
Header set CustomHeaderName one
<FilesMatch „.*“>
Header set CustomHeaderName three
</FilesMatch>
</Directory>
<syntaxhighlight lang="apache" highlight="0" line>
<Directory „/example“>
Header set CustomHeaderName two
</Directory>
Dies gilt auch für .htaccess, da sie in der Zusammenführungsreihenfolge dieselbe Priorität wie Directory haben
Einige nützliche BeispieleNachfolgend finden Sie ein fiktives Beispiel, das die Reihenfolge der Zusammenführung veranschaulichen soll
<Location „/“>
E
</Location>
<Files „f.html“>
D
</Files>
<VirtualHost *>
<Directory „/a/b“>
B
</Directory>
</VirtualHost>
<DirectoryMatch „^.*b$“>
C
</DirectoryMatch>
<Directory „/a/b“>
A
</Directory>
Ein konkreteres Beispiel ist das folgende
<Location „/“>
Require all granted
</Location>
<nowiki># Whoops! Dieser <Directory>-Abschnitt hat keine Wirkung</nowiki>
<Directory „/“>
<RequireAll>
Require all granted
Require not host badguy.example.com
</RequireAll>
</Directory>
|