Zum Inhalt springen

Apache/06 Grundkonfiguration/3 Allgemeine Direktiven: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 3: Zeile 3:
== Beschreibung ==
== Beschreibung ==
Direktiven für den grundlegenden Betrieb von Apache und einer einfachen Website aus statischen Dokumenten
Direktiven für den grundlegenden Betrieb von Apache und einer einfachen Website aus statischen Dokumenten
* Es handelt sich ausschließlich um solche Konfigurationsanweisungen, die zum Kern des Servers ([[core]]) gehören oder  
* Es handelt sich ausschließlich um solche Konfigurationsanweisungen, die zum Kern des Servers ([[core]]) gehören oder
* in MPM-Modulen und in solchen Modulen verfügbar sind, die standardmäßig zu Apache gehören und aktiviert sind
* in MPM-Modulen und in solchen Modulen verfügbar sind, die standardmäßig zu Apache gehören und aktiviert sind


== Server-Umgebung ==
== Server-Umgebung ==
Wie bereits erwähnt, bilden die grundlegenden Programmeinstellungen den ersten Abschnitt der Datei httpd.conf. In der automatisch generierten Konfigurationsdatei einer normalen Apache-Installation bis 2.0 wurde der Abschnitt durch
Wie bereits erwähnt, bilden die grundlegenden Programmeinstellungen den ersten Abschnitt der Datei httpd.conf
folgenden Kommentar charakterisiert:
* In der automatisch generierten Konfigurationsdatei einer normalen Apache-Installation bis 2.0 wurde der Abschnitt durch folgenden Kommentar charakterisiert


### Section 1: Global Environment
### Section 1: Global Environment
Zeile 14: Zeile 14:
# The directives in this section affect the overall operation
# The directives in this section affect the overall operation
# of Apache, such as the number of concurrent requests it can
# of Apache, such as the number of concurrent requests it can
# handle or where it can find its configuration files.
# handle or where it can find its configuration files


Hier wird beispielsweise das grundlegende Verzeichnis wichtiger Server-Ressourcen (ServerRoot) festgelegt. Außerdem werden hier die DSO-Module geladen, und das grundlegende Verhalten des Servers bei der Verarbeitung von Anfragen
Hier wird beispielsweise das grundlegende Verzeichnis wichtiger Server-Ressourcen (ServerRoot) festgelegt
wird konfiguriert. Die Direktiven werden hier in der Reihenfolge behandelt, in
* Außerdem werden hier die DSO-Module geladen, und das grundlegende Verhalten des Servers bei der Verarbeitung von Anfragen wird konfiguriert
der sie in der Standarddatei stehen.
* Die Direktiven werden hier in der Reihenfolge behandelt, in der sie in der Standarddatei stehen


ServerRoot
ServerRoot Stammverzeichnis der Apache-Installation; enthält unter anderem die Verzeichnisse conf/ und logs/
Stammverzeichnis der Apache-Installation; enthält unter anderem die Verzeichnisse conf/ und logs/


Modul core
Modul core Kontext Server Syntax ServerRoot Pfad Standardwert PREFIX der Installation
Kontext Server
Syntax ServerRoot Pfad
Standardwert PREFIX der Installation


Zahlreiche Pfade in der Apache-Konfiguration können relativ zu dem hier eingestellten Verzeichnis angegeben werden. Insbesondere die Verzeichnisse für die
Zahlreiche Pfade in der Apache-Konfiguration können relativ zu dem hier eingestellten Verzeichnis angegeben werden
Konfigurationsdateien (conf/) und die Log-Dateien (logs/) müssen sich normalerweise unterhalb des hier eingestellten Verzeichnisses befinden. Welcher Wert
* Insbesondere die Verzeichnisse für die Konfigurationsdateien (conf/) und die Log-Dateien (logs/) müssen sich normalerweise unterhalb des hier eingestellten Verzeichnisses befinden
hier eingestellt werden muss, variiert je nach Plattform und Installationslayout.
* Welcher Wert hier eingestellt werden muss, variiert je nach Plattform und Installationslayout
In Kapitel 4, »Apache kompilieren und installieren«, finden Sie die passenden
In Kapitel 4, »Apache kompilieren und installieren«, finden Sie die passenden Angaben für verschiedene UNIX-Systeme und für Windows: Auf UNIX-Rechnern handelt es sich um das beim Kompilieren angegebene PREFIX, bei Windows um das übergeordnete Verzeichnis der Apache-Installation
Angaben für verschiedene UNIX-Systeme und für Windows: Auf UNIX-Rechnern
* Beispiele
handelt es sich um das beim Kompilieren angegebene PREFIX, bei Windows um
das übergeordnete Verzeichnis der Apache-Installation. Beispiele:


ServerRoot /usr/local/httpd # UNIX
ServerRoot /usr/local/httpd # UNIX ServerRoot "C:/Programme/Apache Group/Apache2" # Windows
ServerRoot "C:/Programme/Apache Group/Apache2" # Windows


Beachten Sie, dass der Wert dieser Direktive (im Gegensatz zu zahlreichen anderen Konfigurationsanweisungen, deren Wert ein Verzeichnis ist) keinen abschließenden Slash enthalten darf.
Beachten Sie, dass der Wert dieser Direktive (im Gegensatz zu zahlreichen anderen Konfigurationsanweisungen, deren Wert ein Verzeichnis ist) keinen abschließenden Slash enthalten darf


TimeOut
TimeOut Wartezeit, bis die Verarbeitung einer Anfrage abgebrochen wird
Wartezeit, bis die Verarbeitung einer Anfrage abgebrochen wird


Modul core
Modul core Kontext Server Syntax TimeOut Sekunden Standardwert 300
Kontext Server
Syntax TimeOut Sekunden
Standardwert 300


Die Direktive TimeOut legt die Wartezeit für drei verschiedene Aspekte einer
Die Direktive TimeOut legt die Wartezeit für drei verschiedene Aspekte einer HTTP-Transaktion fest
HTTP-Transaktion fest:


* die maximale Gesamtdauer einer GET-Anfrage
* die maximale Gesamtdauer einer GET-Anfrage
Zeile 57: Zeile 45:


In der Regel gibt es keinen Grund, an den (recht großzügig) voreingestellten 300
In der Regel gibt es keinen Grund, an den (recht großzügig) voreingestellten 300
Sekunden etwas zu ändern. Für zukünftige Apache-Versionen ist allerdings
Sekunden etwas zu ändern
geplant, die drei Werte getrennt konfigurierbar zu machen. Siehe auch »RequestReadTimeout« auf Seite 259.
* Für zukünftige Apache-Versionen ist allerdings geplant, die drei Werte getrennt konfigurierbar zu machen
* Siehe auch »RequestReadTimeout« auf Seite 259


KeepAlive
KeepAlive Persistente Verbindungen gemäß HTTP/1.1-Spezifikation
Persistente Verbindungen gemäß HTTP/1.1-Spezifikation


Modul core
Modul core Kontext Server, <VirtualHost>
Kontext Server, <VirtualHost>
Syntax KeepAlive On|Off Standardwert On
Syntax KeepAlive On|Off
Standardwert On


Diese Direktive regelt, ob Apache 2 grundsätzlich persistente HTTP-Verbindungen zulässt, also mehrere Anfragen über ein und dieselbe Verbindung abhandelt.
Diese Direktive regelt, ob Apache 2 grundsätzlich persistente HTTP-Verbindungen zulässt, also mehrere Anfragen über ein und dieselbe Verbindung abhandelt
Clients, die HTTP/1.1 verwenden, erwarten standardmäßig eine persistente Verbindung, HTTP/1.0-Clients dagegen nur, wenn sie den Header Connection:
Clients, die HTTP/1.1 verwenden, erwarten standardmäßig eine persistente Verbindung, HTTP/1.0-Clients dagegen nur, wenn sie den Header Connection
Keep-Alive senden. Es gibt im Allgemeinen keinen Grund, KeepAlive grundsätzlich abzuschalten. Für einzelne Clients, die damit Schwierigkeiten haben, können Sie über eine BrowserMatch-Direktive die Option nokeepalive setzen (siehe
Keep-Alive senden
Kapitel 14, »CGI«).
* Es gibt im Allgemeinen keinen Grund, KeepAlive grundsätzlich abzuschalten
* Für einzelne Clients, die damit Schwierigkeiten haben, können Sie über eine BrowserMatch-Direktive die Option nokeepalive setzen (siehe Kapitel 14, »CGI«)


MaxKeepAliveRequests
MaxKeepAliveRequests Zulässige Höchstzahl von Anfragen über eine persistente Verbindung
Zulässige Höchstzahl von Anfragen über eine persistente Verbindung


Modul core
Modul core Kontext Server, <VirtualHost>
Kontext Server, <VirtualHost>
Syntax MaxKeepAliveRequests Anzahl Standardwert 100
Syntax MaxKeepAliveRequests Anzahl
Standardwert 100


Diese Direktive legt fest, wie viele aufeinanderfolgende HTTP-Anfragen über ein
Diese Direktive legt fest, wie viele aufeinanderfolgende HTTP-Anfragen über ein und dieselbe persistente HTTP-Verbindung abgehandelt werden
und dieselbe persistente HTTP-Verbindung abgehandelt werden. Der Wert 0
* Der Wert 0
steht für beliebig viele Anfragen. Er sollte nicht verwendet werden, weil er möglicherweise die Gefahr von Denial-of-Service-Attacken erhöht. Ein relativ hoher
steht für beliebig viele Anfragen
Wert ist dagegen gut für die Server-Performance, da persistente Verbindungen
* Er sollte nicht verwendet werden, weil er möglicherweise die Gefahr von Denial-of-Service-Attacken erhöht
besonders die Auslieferung von HTML-Dokumenten mit zahlreichen eingebetteten Bildern beschleunigen. Beispiel:
* Ein relativ hoher Wert ist dagegen gut für die Server-Performance, da persistente Verbindungen besonders die Auslieferung von HTML-Dokumenten mit zahlreichen eingebetteten Bildern beschleunigen
* Beispiel


MaxKeepAliveRequests 200
MaxKeepAliveRequests 200


KeepAliveTimeout
KeepAliveTimeout Maximale Zeitspanne für nachfolgende Anfragen innerhalb einer persistenten Verbindung
Maximale Zeitspanne für nachfolgende Anfragen innerhalb einer persistenten
Verbindung


Seit Version 1.x; Zeitangaben in Millisekunden seit 2.3.2
Seit Version 1.x; Zeitangaben in Millisekunden seit 2.3.2
Modul core
Modul core Kontext Server, <VirtualHost>
Kontext Server, <VirtualHost>
Syntax KeepAliveTimeout Zeitwert[ms]
Syntax KeepAliveTimeout Zeitwert[ms]
Standardwert 15
Standardwert 15


Mithilfe dieser Konfigurationsanweisung können Sie festlegen, wie viele Sekunden
Mithilfe dieser Konfigurationsanweisung können Sie festlegen, wie viele Sekunden Apache eine persistente Verbindung nach dem Abschluss einer Anfrage offen halten und auf eine weitere Anfrage warten soll
Apache eine persistente Verbindung nach dem Abschluss einer Anfrage offen halten
* Es ist ein wenig schwierig, den richtigen Wert zu finden: Die Zeitspanne darf nicht zu kurz sein, weil sie persistente Verbindungen ansonsten in der Praxis verhindert, sie sollte aber auch nicht zu lang sein, damit der Server nicht zu stark durch unnütz offen gehaltene Verbindungen belastet wird
und auf eine weitere Anfrage warten soll. Es ist ein wenig schwierig, den richtigen
* Die Voreinstellung von 15 Sekunden ist in der Regel in Ordnung – bei einem sehr beschäftigten Server sollten Sie allerdings einen kürzeren Wert wählen
Wert zu finden: Die Zeitspanne darf nicht zu kurz sein, weil sie persistente Verbindungen ansonsten in der Praxis verhindert, sie sollte aber auch nicht zu lang sein, damit der Server nicht zu stark durch unnütz offen gehaltene Verbindungen belastet
wird. Die Voreinstellung von 15 Sekunden ist in der Regel in Ordnung – bei einem
sehr beschäftigten Server sollten Sie allerdings einen kürzeren Wert wählen.


Seit Version 2.3.2 können Sie den Zeitwert auch in Millisekunden angeben. Dazu
Seit Version 2.3.2 können Sie den Zeitwert auch in Millisekunden angeben
müssen Sie hinter der Zahl das Kürzel ms notieren. Beispiel:
* Dazu müssen Sie hinter der Zahl das Kürzel ms notieren
* Beispiel


KeepAliveTimeout 1500ms
KeepAliveTimeout 1500ms


RequestReadTimeout
RequestReadTimeout Timeouts für den Empfang von Anfrage-Header und -Body von Clients
Timeouts für den Empfang von Anfrage-Header und -Body von Clients


Seit Version 2.2.15
Seit Version 2.2.15
Modul mod_reqtimeout
Modul mod_reqtimeout Kontext Server, <VirtualHost>
Kontext Server, <VirtualHost>
Syntax RequestReadTimeout [header=Timeout[-max.Timeout][,MinRate=Rate] [body=Timeout[-max.Timeout][,MinRate=Rate]
Syntax RequestReadTimeout [header=Timeout[-max.Timeout][,MinRate=Rate] [body=Timeout[-max.Timeout][,MinRate=Rate]
Standardwert header=20-40,MinRate=500 body=20,MinRate=500
Standardwert header=20-40,MinRate=500 body=20,MinRate=500


Seit Apache 2.2.15 ist das Modul mod_reqtimeout verfügbar, mit dem Timeouts
Seit Apache 2.2.15 ist das Modul mod_reqtimeout verfügbar, mit dem Timeouts und Mindestdatenraten für die Header und den Body einer Client-Anfrage gesetzt werden können
und Mindestdatenraten für die Header und den Body einer Client-Anfrage gesetzt
* Das Modul definiert lediglich die Direktive RequestReadTimeout
werden können. Das Modul definiert lediglich die Direktive RequestReadTimeout.
Für die Header und den Body werden jeweils separate Werte angegeben
Für die Header und den Body werden jeweils separate Werte angegeben. Es gibt
* Es gibt drei mögliche Wertangaben
drei mögliche Wertangaben:


* Ein numerischer Wert: Angabe des Gesamt-Timeout-Werts in Sekunden
* Ein numerischer Wert: Angabe des Gesamt-Timeout-Werts in Sekunden


* Zwei numerische Werte (m-n mit m < n): Der erste Wert gibt an, wie lange auf
* Zwei numerische Werte (m-n mit m < n): Der erste Wert gibt an, wie lange auf den Beginn der Datenübertragung gewartet wird
den Beginn der Datenübertragung gewartet wird. Findet dieser innerhalb der
* Findet dieser innerhalb der angegebenen Zeit statt, tritt der zweite Wert als Timeout für die gesamte Datenübertragung in Kraft
angegebenen Zeit statt, tritt der zweite Wert als Timeout für die gesamte
* Zusatzangabe MinRate=n: Nach dem Empfang von n Byte wird der TimeoutWert beziehungsweise der maximale Timeout-Wert um eine Sekunde erhöht
Datenübertragung in Kraft.
* Zusatzangabe MinRate=n: Nach dem Empfang von n Byte wird der TimeoutWert beziehungsweise der maximale Timeout-Wert um eine Sekunde erhöht.


Beispiele:
Beispiele


RequestReadTimeout header=5 body=20
RequestReadTimeout header=5 body=20


Es wird maximal 5 Sekunden auf den Empfang des gesamten Headers und 20
Es wird maximal 5 Sekunden auf den Empfang des gesamten Headers und 20
Sekunden auf den Empfang des Bodys gewartet.
Sekunden auf den Empfang des Bodys gewartet


RequestReadTimeout header=5,MinRate=1000 \
RequestReadTimeout header=5,MinRate=1000 \
body=20-40,MinRate=1000
body=20-40,MinRate=1000


Für den Header gelten 5 Sekunden, die pro 1.000 empfangenen Byte um eine
Für den Header gelten 5 Sekunden, die pro 1.000 empfangenen Byte um eine Sekunde erhöht werden
Sekunde erhöht werden. Beim Body werden 20 Sekunden bis zum Beginn der
* Beim Body werden 20 Sekunden bis zum Beginn der Datenübertragung gewährt und insgesamt maximal 40 Sekunden; letztere werden wiederum pro 1.000 Byte um eine Sekunde erhöht
Datenübertragung gewährt und insgesamt maximal 40 Sekunden; letztere werden wiederum pro 1.000 Byte um eine Sekunde erhöht.


RequestReadTimeout header=0 body=0
RequestReadTimeout header=0 body=0


Deaktiviert die Funktionalität der Direktive – beispielsweise für einen VHost, bei
Deaktiviert die Funktionalität der Direktive – beispielsweise für einen VHost, bei dem Sie wissen, dass er mit besonders langsamen Clients zusammenarbeiten muss
dem Sie wissen, dass er mit besonders langsamen Clients zusammenarbeiten muss.


Listen
Listen TCP-Port (und IP-Adresse), an der der Webserver lauscht
TCP-Port (und IP-Adresse), an der der Webserver lauscht


Seit Version 1.x; seit 2.0 vorgeschrieben; Protokoll seit 2.1.5
Seit Version 1.x; seit 2.0 vorgeschrieben; Protokoll seit 2.1.5
Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event
Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event Kontext Server Syntax Listen [IP-Addr:]Port [Protokoll]
Kontext Server
Syntax Listen [IP-Addr:]Port [Protokoll]
Standardwert 80
Standardwert 80


Dies ist eine der wichtigsten Konfigurationsdirektiven. Sie bestimmt, an welchen
Dies ist eine der wichtigsten Konfigurationsdirektiven
TCP-Ports der Apache-Webserver auf eingehende Verbindungen lauscht. Da die
* Sie bestimmt, an welchen TCP-Ports der Apache-Webserver auf eingehende Verbindungen lauscht
TCP/IP-Implementierung trotz der APR-Abstraktionsschicht plattformspezifisch
* Da die TCP/IP-Implementierung trotz der APR-Abstraktionsschicht plattformspezifisch ist, wurde diese Direktive in den MPM-Modulen und nicht im core implementiert
ist, wurde diese Direktive in den MPM-Modulen und nicht im core implementiert.


Wird nur ein TCP-Port angegeben, dann lauscht der Server über alle Netzwerkschnittstellen an diesem Port. Wenn Sie Verbindungen nur über bestimmte
Wird nur ein TCP-Port angegeben, dann lauscht der Server über alle Netzwerkschnittstellen an diesem Port
Schnittstellen zulassen möchten, können Sie vor dem Port, durch einen Doppelpunkt getrennt, eine IP-Adresse angeben. Anstelle IPv4-Adressen können übri
* Wenn Sie Verbindungen nur über bestimmte Schnittstellen zulassen möchten, können Sie vor dem Port, durch einen Doppelpunkt getrennt, eine IP-Adresse angeben
* Anstelle IPv4-Adressen können übri


gens auch IPv6-Adressen verwendet werden; da diese Doppelpunkte enthalten, müssen sie zusätzlich in eckigen Klammern stehen, um sie korrekt von der Portangabe zu trennen. Wenn Ihr Server an mehreren Ports lauschen soll, müssen Sie
gens auch IPv6-Adressen verwendet werden; da diese Doppelpunkte enthalten, müssen sie zusätzlich in eckigen Klammern stehen, um sie korrekt von der Portangabe zu trennen
mehrere Listen-Anweisungen untereinanderschreiben; die Direktive kann nur
* Wenn Ihr Server an mehreren Ports lauschen soll, müssen Sie mehrere Listen-Anweisungen untereinanderschreiben; die Direktive kann nur jeweils einen Wert haben
jeweils einen Wert haben. Wenn Sie ein anderes Protokoll verwenden möchten
* Wenn Sie ein anderes Protokoll verwenden möchten als das Standardprotokoll (zum Beispiel HTTP auf Port 80 oder HTTPS auf Port
als das Standardprotokoll (zum Beispiel HTTP auf Port 80 oder HTTPS auf Port
443), dann können Sie es optional als zusätzlichen Parameter angeben
443), dann können Sie es optional als zusätzlichen Parameter angeben.


Beachten Sie, dass Listen nur im Server-Kontext stehen darf. Wenn Sie virtuelle
Beachten Sie, dass Listen nur im Server-Kontext stehen darf
Hosts verwenden, müssen zunächst die IP-Adressen und Ports für den »Hauptserver« und alle virtuellen Hosts angegeben werden. Anschließend können Sie sie
* Wenn Sie virtuelle Hosts verwenden, müssen zunächst die IP-Adressen und Ports für den »Hauptserver« und alle virtuellen Hosts angegeben werden
mithilfe von <VirtualHost>-Containern nach Wunsch aufteilen. Beispiele:
* Anschließend können Sie sie mithilfe von <VirtualHost>-Containern nach Wunsch aufteilen
* Beispiele


Listen 8080 http
Listen 8080 http Listen 196.23.17.3:80
Listen 196.23.17.3:80
Listen [fe80::3a0:93a2:5a5b:3ab1]:80
Listen [fe80::3a0:93a2:5a5b:3ab1]:80


Protocol
Protocol Protokoll für ein lauschendes Socket festlegen
Protokoll für ein lauschendes Socket festlegen


Seit Version 2.1.5 (für Windows seit 2.3.3)
Seit Version 2.1.5 (für Windows seit 2.3.3)
Modul core
Modul core Kontext Server, <VirtualHost>
Kontext Server, <VirtualHost>
Syntax Protocol Protokoll Standardwert nicht gesetzt
Syntax Protocol Protokoll
Standardwert nicht gesetzt


Wenn Sie HTTP oder HTTPS nicht auf den Standard-Ports (80 beziehungsweise
Wenn Sie HTTP oder HTTPS nicht auf den Standard-Ports (80 beziehungsweise
443) betreiben, können Sie mit Hilfe dieser Direktive das Protokoll für den aktuellen Kontext angeben. Dies dient der Auswahl des passenden Moduls und der
443) betreiben, können Sie mit Hilfe dieser Direktive das Protokoll für den aktuellen Kontext angeben
Verarbeitung protokollspezifischer Optionen durch AcceptFilter. Das folgende
* Dies dient der Auswahl des passenden Moduls und der Verarbeitung protokollspezifischer Optionen durch AcceptFilter
Beispiel stellt https für einen Nicht-Standard-Port ein:
* Das folgende Beispiel stellt https für einen Nicht-Standard-Port ein


Protocol https
Protocol https


Alternativ kann das Protokoll auch über Listen eingestellt werden.
Alternativ kann das Protokoll auch über Listen eingestellt werden


Mutex
Mutex Allgemeine Methode für alle Serialisierungsaufgaben
Allgemeine Methode für alle Serialisierungsaufgaben


Seit Version 2.3.4
Seit Version 2.3.4
Modul core
Modul core Kontext Server
Kontext Server


Syntax Mutex-Mechanismus Default|Methode [OmitPID]
Syntax Mutex-Mechanismus Default|Methode [OmitPID]
Standardwert Default
Standardwert Default


Manche Vorgänge in einem Webserver erfordern, dass sie nur jeweils einmal zur
Manche Vorgänge in einem Webserver erfordern, dass sie nur jeweils einmal zur selben Zeit ausgeführt werden dürfen
selben Zeit ausgeführt werden dürfen. Um dies sicherzustellen, wird ein MutexVerfahren verwendet (mutual exclusion, also gegenseitiger Ausschluss). Bis einschließlich Version 2.2 gibt es diverse Einzeldirektiven, die Mutex-Einstellungen
* Um dies sicherzustellen, wird ein MutexVerfahren verwendet (mutual exclusion, also gegenseitiger Ausschluss)
für verschiedene Vorgänge vornehmen. In Version 2.3.4 wurde dann die zentrale
* Bis einschließlich Version 2.2 gibt es diverse Einzeldirektiven, die Mutex-Einstellungen für verschiedene Vorgänge vornehmen
Direktive Mutex eingeführt, die alle anderen Mutex-Direktiven ersetzt.
* In Version 2.3.4 wurde dann die zentrale Direktive Mutex eingeführt, die alle anderen Mutex-Direktiven ersetzt


Der erste Parameter, der Mechanismus, bestimmt, für welchen der verschiedenen Anwendungsfälle Sie einen Mutex definieren möchten. Verfügbar sind zurzeit folgende (Drittanbieter-Module können jedoch zusätzliche MechanismusNamen definieren):
Der erste Parameter, der Mechanismus, bestimmt, für welchen der verschiedenen Anwendungsfälle Sie einen Mutex definieren möchten
* Verfügbar sind zurzeit folgende (Drittanbieter-Module können jedoch zusätzliche MechanismusNamen definieren)


* mpm_accept (Module prefork und worker): Vermeidung des »ThunderingHerd«-Problems (donnernde Herde) beim Verbindungseingang; ersetzt die
* mpm_accept (Module prefork und worker): Vermeidung des »ThunderingHerd«-Problems (donnernde Herde) beim Verbindungseingang; ersetzt die veraltete, im vorliegenden Kapitel beschriebene Direktive AcceptMutex
veraltete, im vorliegenden Kapitel beschriebene Direktive AcceptMutex.
* authdigest_client (mod_auth_digest): Zugriff auf die Client-Liste im Shared Memory (siehe Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)
* authdigest_client (mod_auth_digest): Zugriff auf die Client-Liste im Shared
* authdigest_opaque (mod_auth_digest): Zugriff auf den Counter im Shared Memory (Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)
Memory (siehe Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)
* authdigest_opaque (mod_auth_digest): Zugriff auf den Counter im Shared
Memory (Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)
* ldap_cache (mod_ldap): Zugriff auf den Cache für LDAP-Abfrage-Ergebnisse
* ldap_cache (mod_ldap): Zugriff auf den Cache für LDAP-Abfrage-Ergebnisse
(Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)
(Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)
* rewrite_map (mod_rewrite): Vermeidung vermischter Ein-/Ausgabedaten
* rewrite_map (mod_rewrite): Vermeidung vermischter Ein-/Ausgabedaten beim Zugriff mehrerer Anfragen auf externe RewriteMap-Programme (Kapitel 8, »Weiterleitungen und Indizes«)
beim Zugriff mehrerer Anfragen auf externe RewriteMap-Programme (Kapitel 8, »Weiterleitungen und Indizes«)
* ssl_cache (mod_ssl): Zugriff auf den SSL-Session-Cache (Kapitel 10, »Gesicherte Verbindungen«)
* ssl_cache (mod_ssl): Zugriff auf den SSL-Session-Cache (Kapitel 10, »Gesicherte Verbindungen«)
* ssl_stapling (mod_ssl): Zugriff auf den OCSP-Stapling-Cache (Kapitel 10, »Gesicherte Verbindungen«)
* ssl_stapling (mod_ssl): Zugriff auf den OCSP-Stapling-Cache (Kapitel 10, »Gesicherte Verbindungen«)
* watchdog_callback (mod_watchdog): Callback-Funktion des jeweiligen ClientModuls (mod_watchdog ist ein neues Modul, das noch nicht dokumentiert
* watchdog_callback (mod_watchdog): Callback-Funktion des jeweiligen ClientModuls (mod_watchdog ist ein neues Modul, das noch nicht dokumentiert wurde, und wird daher in diesem Buch noch nicht beschrieben)
wurde, und wird daher in diesem Buch noch nicht beschrieben)


Der zweite Parameter ist die Mutex-Methode. In Versionen vor 2.0 konnte diese
Der zweite Parameter ist die Mutex-Methode
nur einmalig bei der Kompilierung angepasst werden. Das funktioniert in Versionen ab 2.0 noch immer. Die Flags, die Sie für den jeweiligen Wert beim Aufruf
* In Versionen vor 2.0 konnte diese nur einmalig bei der Kompilierung angepasst werden
des configure-Skripts setzen müssen, werden bei den entsprechenden Angaben
* Das funktioniert in Versionen ab 2.0 noch immer
für die Direktive genannt:
* Die Flags, die Sie für den jeweiligen Wert beim Aufruf des configure-Skripts setzen müssen, werden bei den entsprechenden Angaben für die Direktive genannt


* flock: Apache verwendet den Systemaufruf flock(), um eine Dateisperre auf
* flock: Apache verwendet den Systemaufruf flock(), um eine Dateisperre auf die mithilfe von LockFile definierte Datei zu errichten und später wieder aufzuheben
die mithilfe von LockFile definierte Datei zu errichten und später wieder aufzuheben. Um dies bei der Kompilierung als Standard zu setzen, müssen Sie
* Um dies bei der Kompilierung als Standard zu setzen, müssen Sie configure mit folgender Option aufrufen
configure mit folgender Option aufrufen:


CFLAGS="-D APR_USE_FLOCK_SERIALIZE"
CFLAGS="-D APR_USE_FLOCK_SERIALIZE"


* fcntl: Der Systemaufruf fctnl() wird benutzt, um die durch LockFile festgelegte Datei zu sperren und wieder zu entsperren.
* fcntl: Der Systemaufruf fctnl() wird benutzt, um die durch LockFile festgelegte Datei zu sperren und wieder zu entsperren


configure: -D APR_USE_FCNTL_SERIALIZE
configure: -D APR_USE_FCNTL_SERIALIZE


* posixsem: Apache verwendet mit POSIX kompatible Semaphore als Warteschlangen.
* posixsem: Apache verwendet mit POSIX kompatible Semaphore als Warteschlangen


configure: -D APR_USE_POSIXSEM_SERIALIZE
configure: -D APR_USE_POSIXSEM_SERIALIZE


* sysvsem: Es werden mit System V kompatible Semaphore als Warteschlangen
* sysvsem: Es werden mit System V kompatible Semaphore als Warteschlangen benutzt
benutzt. Diese Einstellung wird zurzeit nur unter dem Betriebssystem IRIX
* Diese Einstellung wird zurzeit nur unter dem Betriebssystem IRIX verwendet
verwendet.


configure: -D APR_USE_SYSVSEM_SERIALIZE
configure: -D APR_USE_SYSVSEM_SERIALIZE


* sem: Es wird jeweils die »beste« verfügbare Semaphoren-Implementierung
* sem: Es wird jeweils die »beste« verfügbare Semaphoren-Implementierung ausgewählt, also je nach System entweder posixsem oder sysvsem
ausgewählt, also je nach System entweder posixsem oder sysvsem. Einen eigenen configure-Wert hierfür gibt es logischerweise nicht.
* Einen eigenen configure-Wert hierfür gibt es logischerweise nicht
* pthread: Apache benutzt POSIX-Mutexe, die der POSIX-Thread-Spezifikation
* pthread: Apache benutzt POSIX-Mutexe, die der POSIX-Thread-Spezifikation genügen
genügen.


configure: -D APR_USE_PTHREAD_SERIALIZE
configure: -D APR_USE_PTHREAD_SERIALIZE


* Default: Der bei der Kompilierung festgelegte Wert wird verwendet.
* Default: Der bei der Kompilierung festgelegte Wert wird verwendet


Zusätzlich können Sie noch das Schlüsselwort OmitPID angeben, um zu verhindern, dass die Prozess-ID des Parent-Prozesses an den Namen der Mutex-Datei
Zusätzlich können Sie noch das Schlüsselwort OmitPID angeben, um zu verhindern, dass die Prozess-ID des Parent-Prozesses an den Namen der Mutex-Datei angehängt wird
angehängt wird.


AcceptFilter
AcceptFilter Optimierung für die lauschenden Sockets bestimmter Protokolle
Optimierung für die lauschenden Sockets bestimmter Protokolle


Seit Version 2.1.5
Seit Version 2.1.5
Modul core
Modul core Kontext Server Syntax AcceptFilter Protokoll Filter Standardwert nicht gesetzt
Kontext Server
Syntax AcceptFilter Protokoll Filter
Standardwert nicht gesetzt


Unter einigen Betriebssystemen existieren spezielle Kernel-Filter, die die Performance von TCP/IP-Anwendungsprotokollen durch Pufferung verbessern können.
Unter einigen Betriebssystemen existieren spezielle Kernel-Filter, die die Performance von TCP/IP-Anwendungsprotokollen durch Pufferung verbessern können
In der Praxis sind dies die Accept-Filter von FreeBSD sowie die TCP_DEFER_
In der Praxis sind dies die Accept-Filter von FreeBSD sowie die TCP_DEFER_
ACCEPT-Filter von Linux.
ACCEPT-Filter von Linux


Die passenden Werte unter FreeBSD sind:
Die passenden Werte unter FreeBSD sind


AcceptFilter http httpready
AcceptFilter http httpready AcceptFilter https dataready
AcceptFilter https dataready


httpready puffert die gesamte HTTP-Anfrage auf Kernel-Ebene und gibt sie erst
httpready puffert die gesamte HTTP-Anfrage auf Kernel-Ebene und gibt sie erst dann an den Server weiter, wenn sie vollständig ist
dann an den Server weiter, wenn sie vollständig ist. Die Vollständigkeit von
* Die Vollständigkeit von HTTPS-Anfragen kann der Kernel dagegen aufgrund der Verschlüsselung nicht erkennen; deshalb wird hier dataready verwendet
HTTPS-Anfragen kann der Kernel dagegen aufgrund der Verschlüsselung nicht
* Näheres steht in den FreeBSD-Manpages zu accf_http(9) beziehungsweise accf_data(9)
erkennen; deshalb wird hier dataready verwendet. Näheres steht in den
FreeBSD-Manpages zu accf_http(9) beziehungsweise accf_data(9).


Auf Linux-Systemen steht dagegen nur der Filter data zur Verfügung:
Auf Linux-Systemen steht dagegen nur der Filter data zur Verfügung


AcceptFilter http data
AcceptFilter http data AcceptFilter https data
AcceptFilter https data


Weitere Informationen über TCP_DEFER_ACCEPT liefert die Linux-Manpage zu
Weitere Informationen über TCP_DEFER_ACCEPT liefert die Linux-Manpage zu tcp(7)
tcp(7).


Für Protokolle, die vor dem Senden auf eine Server-Meldung warten, empfiehlt
Für Protokolle, die vor dem Senden auf eine Server-Meldung warten, empfiehlt sich dagegen der Wert none – die Apache-Online-Dokumentation nennt als Beispiel NNTP
sich dagegen der Wert none – die Apache-Online-Dokumentation nennt als Beispiel NNTP:


AcceptFilter nntp none
AcceptFilter nntp none


LoadModule
LoadModule Das angegebene DSO-Modul laden und aktivieren
Das angegebene DSO-Modul laden und aktivieren


Modul mod_so
Modul mod_so Kontext Server Syntax LoadModule Modul Dateiname Standardwert nicht gesetzt
Kontext Server
Syntax LoadModule Modul Dateiname
Standardwert nicht gesetzt


Wenn Sie einen Apache-Webserver mit DSO-Unterstützung betreiben (siehe
Wenn Sie einen Apache-Webserver mit DSO-Unterstützung betreiben (siehe Kapitel 4, »Apache kompilieren und installieren«) und ein DSO-Modul laden möchten, wird dazu die Direktive LoadModule verwendet
Kapitel 4, »Apache kompilieren und installieren«) und ein DSO-Modul laden
* Sie benötigt zwei Parameter: einen kanonischen Modulnamen sowie den Pfad und Dateinamen des gewünschten Moduls
möchten, wird dazu die Direktive LoadModule verwendet. Sie benötigt zwei Parameter: einen kanonischen Modulnamen sowie den Pfad und Dateinamen des
* Der Dateiname hat jeweils das Format mod_xxx.so.2 Beim kanonischen Namen werden das Präfix mod_ und die Dateiendung .so weggelas
gewünschten Moduls. Der Dateiname hat jeweils das Format mod_xxx.so.2 Beim
kanonischen Namen werden das Präfix mod_ und die Dateiendung .so weggelas


sen; dafür wird _module angehängt (z.B. xxx_module). Die Pfadangabe wird relativ
sen; dafür wird _module angehängt (z.B
zur ServerRoot interpretiert, falls sie keinen absoluten Pfad enthält. Das folgende
* xxx_module)
Beispiel lädt das Modul mod_dir:
* Die Pfadangabe wird relativ zur ServerRoot interpretiert, falls sie keinen absoluten Pfad enthält
* Das folgende Beispiel lädt das Modul mod_dir


LoadModule dir_module modules/mod_dir.so
LoadModule dir_module modules/mod_dir.so


Bei manchen Modulen heißt die eigentliche DSO-Datei nicht mod_xxx.so, sondern anders. Dies ist beispielsweise bei PHP (siehe Kapitel 15, »Technologien zur
Bei manchen Modulen heißt die eigentliche DSO-Datei nicht mod_xxx.so, sondern anders
Webprogrammierung«) der Fall:
* Dies ist beispielsweise bei PHP (siehe Kapitel 15, »Technologien zur Webprogrammierung«) der Fall


LoadModule php5_module modules/libphp5.so
LoadModule php5_module modules/libphp5.so


LoadFile
LoadFile Die angegebene Objektdatei oder Bibliothek laden
Die angegebene Objektdatei oder Bibliothek laden


Modul mod_so
Modul mod_so Kontext Server Syntax LoadFile Dateiname [Dateiname ...]
Kontext Server
Syntax LoadFile Dateiname [Dateiname ...]
Standardwert nicht gesetzt
Standardwert nicht gesetzt


Einige Module benötigen Unterstützung durch zusätzliche Dateien. Eine solche
Einige Module benötigen Unterstützung durch zusätzliche Dateien
externe Bibliothek oder Objektdatei wird mithilfe von LoadFile geladen. Sie können eine oder mehrere zu ladende Dateien angeben. Das folgende Beispiel lädt
* Eine solche externe Bibliothek oder Objektdatei wird mithilfe von LoadFile geladen
auf einem Windows-Rechner den Perl-Interpreter, der für das Modul mod_perl
* Sie können eine oder mehrere zu ladende Dateien angeben
(siehe Kapitel 15, »Technologien zur Webprogrammierung«) benötigt wird, und
* Das folgende Beispiel lädt auf einem Windows-Rechner den Perl-Interpreter, der für das Modul mod_perl
anschließend mod_perl selbst:
(siehe Kapitel 15, »Technologien zur Webprogrammierung«) benötigt wird, und anschließend mod_perl selbst


LoadFile "C:/Perl/bin/perl58.dll"
LoadFile "C:/Perl/bin/perl58.dll"
LoadModule perl_module modules/mod_perl.so
LoadModule perl_module modules/mod_perl.so


TraceEnable
TraceEnable Bestimmt das Verhalten bei TRACE-Anfragen
Bestimmt das Verhalten bei TRACE-Anfragen


Seit Version 1.3.34 und 2.0.55
Seit Version 1.3.34 und 2.0.55
Modul core
Modul core Kontext Server Syntax TraceEnable on|off|extended Standardwert On
Kontext Server
Syntax TraceEnable on|off|extended
Standardwert On


2 Unter Windows handelt es sich bei DSO-Modulen formal um DLL-Dateien. Trotzdem
2 Unter Windows handelt es sich bei DSO-Modulen formal um DLL-Dateien
wurde seit Apache 1.3.15 auch auf dieser Plattform die Dateiendung .so eingeführt.
* Trotzdem wurde seit Apache 1.3.15 auch auf dieser Plattform die Dateiendung .so eingeführt


Diese Direktive ermöglicht es, das Verhalten von Apache bei HTTP-Anfragen mit
Diese Direktive ermöglicht es, das Verhalten von Apache bei HTTP-Anfragen mit der Methode TRACE, die eine Liste der zum Erreichen einer URL verwendeten Proxy-Server zurückgibt (siehe Kapitel 2, »Funktionsweise von Webservern«), zu modifizieren
der Methode TRACE, die eine Liste der zum Erreichen einer URL verwendeten
* Die Standardeinstellung on besagt, dass TRACE-Anfragen erlaubt sind, aber im Einklang mit RFC 2616 keinen Anfrage-Body enthalten dürfen
Proxy-Server zurückgibt (siehe Kapitel 2, »Funktionsweise von Webservern«), zu
TraceEnable off verbietet TRACE-Anfragen ganz und sendet dem Client eine Antwort mit dem Status 405 Method not allowed
modifizieren. Die Standardeinstellung on besagt, dass TRACE-Anfragen erlaubt
sind, aber im Einklang mit RFC 2616 keinen Anfrage-Body enthalten dürfen.
TraceEnable off verbietet TRACE-Anfragen ganz und sendet dem Client eine Antwort mit dem Status 405 Method not allowed.


Ein vom HTTP-Standard abweichendes Verhalten können Sie mit dem Wert
Ein vom HTTP-Standard abweichendes Verhalten können Sie mit dem Wert extended erreichen: Die Anfragen dürfen einen Body enthalten
extended erreichen: Die Anfragen dürfen einen Body enthalten. Dieser ist auf 64
* Dieser ist auf 64
Kilobyte beschränkt; hinzu kommen maximal 8 Kilobyte für Chunk-Header, wenn Transfer-Encoding: chunked verwendet wird. Diese Einschränkungen gelten nicht, wenn Apache als Proxy eingesetzt wird (siehe Kapitel 13, »Proxy- und
Kilobyte beschränkt; hinzu kommen maximal 8 Kilobyte für Chunk-Header, wenn Transfer-Encoding: chunked verwendet wird
Cache-Funktionen«). In diesem Modus gibt die Antwort im Body alle Header
* Diese Einschränkungen gelten nicht, wenn Apache als Proxy eingesetzt wird (siehe Kapitel 13, »Proxy- und Cache-Funktionen«)
zurück. Diese Variante ist vor allem für Debugging- und Testzwecke geeignet.
* In diesem Modus gibt die Antwort im Body alle Header zurück
* Diese Variante ist vor allem für Debugging- und Testzwecke geeignet


=== Plattformspezifische Einstellungen ===
=== Plattformspezifische Einstellungen ===
Die Konfigurationsanweisungen in diesem Abschnitt betreffen ebenfalls das allgemeine Verhalten des Server-Programms. Sie sind allerdings nicht im Core, sondern in diversen MPM-Modulen definiert, weil sie nicht für alle Plattformen und
Die Konfigurationsanweisungen in diesem Abschnitt betreffen ebenfalls das allgemeine Verhalten des Server-Programms
Laufzeitmodelle von Apache festgelegt sind. Aufgrund ihrer besonderen Wichtigkeit wurde die Direktive Listen bereits im vorangegangenen Abschnitt behandelt, obwohl sie ebenfalls zu den MPM-Direktiven gehört.
* Sie sind allerdings nicht im Core, sondern in diversen MPM-Modulen definiert, weil sie nicht für alle Plattformen und Laufzeitmodelle von Apache festgelegt sind
* Aufgrund ihrer besonderen Wichtigkeit wurde die Direktive Listen bereits im vorangegangenen Abschnitt behandelt, obwohl sie ebenfalls zu den MPM-Direktiven gehört


Lesen Sie auch die Beschreibungen der diversen Multiprocessing-Module in Kapitel 3, »Apache 2 im Überblick«. Dort wird erläutert, auf welche Weise die MPMs
Lesen Sie auch die Beschreibungen der diversen Multiprocessing-Module in Kapitel 3, »Apache 2 im Überblick«
Gebrauch von Prozessen und Threads machen. Dies verdeutlicht die Zusammenhänge zwischen den zahlreichen Direktiven, die deren Anzahl festlegen.
* Dort wird erläutert, auf welche Weise die MPMs Gebrauch von Prozessen und Threads machen
* Dies verdeutlicht die Zusammenhänge zwischen den zahlreichen Direktiven, die deren Anzahl festlegen


Beachten Sie, dass sich einige Direktiven in diesem Abschnitt nicht durch einen
Beachten Sie, dass sich einige Direktiven in diesem Abschnitt nicht durch einen normalen Neustart von Apache 2 aktivieren lassen
normalen Neustart von Apache 2 aktivieren lassen. Stattdessen müssen Sie dafür
* Stattdessen müssen Sie dafür den Server komplett beenden und wieder starten
den Server komplett beenden und wieder starten. Dies betrifft vor allem die
* Dies betrifft vor allem die maximal konfigurierbaren Werte ServerLimit und ThreadLimit
maximal konfigurierbaren Werte ServerLimit und ThreadLimit.


  GracefulShutdownTimeout
  GracefulShutdownTimeout Wartezeit, nach der Apache bei graceful-stop auf jeden Fall beendet wird
Wartezeit, nach der Apache bei graceful-stop auf jeden Fall beendet wird


  Seit Version 2.2
  Seit Version 2.2
Zeile 396: Zeile 328:
  Standardwert 0
  Standardwert 0


Ein neues Feature von Apache 2.2 ist das saubere Beenden, das heißt, der Hauptprozess wird erst beendet, wenn die Worker-Prozesse oder -Threads mit dem Verarbeiten der aktuellen Anfragen fertig sind (siehe Kapitel 5, »Apache in Betrieb
Ein neues Feature von Apache 2.2 ist das saubere Beenden, das heißt, der Hauptprozess wird erst beendet, wenn die Worker-Prozesse oder -Threads mit dem Verarbeiten der aktuellen Anfragen fertig sind (siehe Kapitel 5, »Apache in Betrieb nehmen«)
nehmen«). Diese Direktive bestimmt optional eine maximale Wartezeit in Sekunden; sobald diese erreicht ist, wird Apache sofort beendet. Der Vorgabewert 0 bedeutet, dass beliebig lange auf die Worker gewartet wird. Das folgende Beispiel
* Diese Direktive bestimmt optional eine maximale Wartezeit in Sekunden; sobald diese erreicht ist, wird Apache sofort beendet
legt eine Höchstdauer von zwei Minuten fest:
* Der Vorgabewert 0 bedeutet, dass beliebig lange auf die Worker gewartet wird
* Das folgende Beispiel legt eine Höchstdauer von zwei Minuten fest
  GracefulShutdownTimeout 120
  GracefulShutdownTimeout 120


  PidFile
  PidFile Datei für die PID des Apache-Hauptprozesses
Datei für die PID des Apache-Hauptprozesses


  Modul beos, mpm_winnt, mpmt_os2, prefork, worker, event
  Modul beos, mpm_winnt, mpmt_os2, prefork, worker, event
Zeile 409: Zeile 341:
  Standardwert logs/httpd.pid
  Standardwert logs/httpd.pid


Diese Direktive bestimmt den Pfad der PID-Datei: Wie die meisten UNIX-Daemons legt auch der Apache-HTTP-Server die Prozess-ID (PID) seines Hauptprozesses in einer Datei ab, um beispielsweise bei einem Startbefehl zu kontrollieren, ob der Server noch läuft (oder unsauber beendet wurde). In Kapitel 5, »Apache in
Diese Direktive bestimmt den Pfad der PID-Datei: Wie die meisten UNIX-Daemons legt auch der Apache-HTTP-Server die Prozess-ID (PID) seines Hauptprozesses in einer Datei ab, um beispielsweise bei einem Startbefehl zu kontrollieren, ob der Server noch läuft (oder unsauber beendet wurde)
Betrieb nehmen«, wird erläutert, wie diese Datei auf einem UNIX-Rechner dazu
* In Kapitel 5, »Apache in Betrieb nehmen«, wird erläutert, wie diese Datei auf einem UNIX-Rechner dazu verwendet werden kann, um Apache zu beenden oder neu zu starten
verwendet werden kann, um Apache zu beenden oder neu zu starten.


Da nicht jedes Betriebssystem UNIX-artige PIDs verwendet und das Verfahren
Da nicht jedes Betriebssystem UNIX-artige PIDs verwendet und das Verfahren deshalb nicht auf jede beliebige Plattform portierbar ist, ist die Direktive nicht im core, sondern in den passenden MPM-Modulen definiert
deshalb nicht auf jede beliebige Plattform portierbar ist, ist die Direktive nicht im
* Hier ein Beispiel
core, sondern in den passenden MPM-Modulen definiert. Hier ein Beispiel:


PidFile /var/run/httpd.pid
PidFile /var/run/httpd.pid


Wenn kein absoluter Pfad angegeben wird, interpretiert Apache die Angabe relativ zur ServerRoot.
Wenn kein absoluter Pfad angegeben wird, interpretiert Apache die Angabe relativ zur ServerRoot


User
User UNIX-User-ID, unter der Apache Anfragen bearbeitet
UNIX-User-ID, unter der Apache Anfragen bearbeitet


Seit Version 1.x; seit 2.0 nur noch Server
Seit Version 1.x; seit 2.0 nur noch Server Modul prefork, worker, event; seit 2.3-beta mod_unixd Kontext Server Syntax User Username | #Usernr
Modul prefork, worker, event; seit 2.3-beta mod_unixd
Kontext Server
Syntax User Username | #Usernr.
Standardwert #-1
Standardwert #-1


Die Direktive User funktioniert nur auf UNIX-Plattformen. Sie legt die User-ID
Die Direktive User funktioniert nur auf UNIX-Plattformen
fest, unter der Apache Client-Anfragen beantwortet. Das betrifft nicht den Hauptprozess, der für die Steuerung des Servers sowie für den Start der eigentlichen
* Sie legt die User-ID fest, unter der Apache Client-Anfragen beantwortet
Arbeitsprozesse beziehungsweise -Threads zuständig ist – dieser läuft in der Regel
* Das betrifft nicht den Hauptprozess, der für die Steuerung des Servers sowie für den Start der eigentlichen Arbeitsprozesse beziehungsweise -Threads zuständig ist – dieser läuft in der Regel unter der User-ID root
unter der User-ID root.


Die User-ID kann entweder als Username oder numerisch angegeben werden.
Die User-ID kann entweder als Username oder numerisch angegeben werden
Wenn Sie eine Usernummer verwenden, muss diese hinter einer Raute stehen.
Wenn Sie eine Usernummer verwenden, muss diese hinter einer Raute stehen
Beispiele:
Beispiele


User htuser
User htuser User #103
User #103


Per Voreinstellung läuft Apache 2 unter der User-ID -1. Dies entspricht auf den
Per Voreinstellung läuft Apache 2 unter der User-ID -1
meisten Systemen dem User nobody. Normalerweise ist dies in Ordnung; nobody
* Dies entspricht auf den meisten Systemen dem User nobody
ist meist eine Benutzerkennung ohne Shell. Selbst wenn sich also jemand über
* Normalerweise ist dies in Ordnung; nobody ist meist eine Benutzerkennung ohne Shell
eine Sicherheitslücke die Rechte des Webservers aneignen sollte, wird er es nicht
* Selbst wenn sich also jemand über eine Sicherheitslücke die Rechte des Webservers aneignen sollte, wird er es nicht allzu leicht haben, unter dieser User-ID Schaden anzurichten
allzu leicht haben, unter dieser User-ID Schaden anzurichten.


Noch besser ist es, einen separaten User nur für den Webserver-Betrieb einzurichten. Auch in diesem Fall sollten Sie darauf achten, dass sich unter diesem
Noch besser ist es, einen separaten User nur für den Webserver-Betrieb einzurichten
Benutzerkonto niemand persönlich anmelden kann – dies erreichen Sie auf vielen Betriebssystemen, indem Sie die Login-Shell des Kontos auf /bin/false setzen.
* Auch in diesem Fall sollten Sie darauf achten, dass sich unter diesem Benutzerkonto niemand persönlich anmelden kann – dies erreichen Sie auf vielen Betriebssystemen, indem Sie die Login-Shell des Kontos auf /bin/false setzen
Darüber hinaus sollte der User einer Group angehören, die ebenfalls exklusiv für
Darüber hinaus sollte der User einer Group angehören, die ebenfalls exklusiv für den Einsatz von Apache eingerichtet wurde
den Einsatz von Apache eingerichtet wurde. Die beiden folgenden Befehle zur
* Die beiden folgenden Befehle zur Erstellung einer solchen Group und eines Users sind für Linux geeignet und zeigen sinngemäß, wie es funktioniert
Erstellung einer solchen Group und eines Users sind für Linux geeignet und zeigen sinngemäß, wie es funktioniert:


# groupadd htgroup
# groupadd htgroup
# useradd -s /bin/false -g htgroup htuser
# useradd -s /bin/false -g htgroup htuser


Anschließend müssen Sie die neu erstellte User- und Group-ID in der ApacheKonfigurationsdatei eintragen:
Anschließend müssen Sie die neu erstellte User- und Group-ID in der ApacheKonfigurationsdatei eintragen


User htuser
User htuser Group htgroup
Group htgroup


Bitte beachten Sie, dass Sie User niemals auf root setzen sollten!
Bitte beachten Sie, dass Sie User niemals auf root setzen sollten!


Group
Group UNIX-Group-ID, unter der Apache Anfragen bearbeitet
UNIX-Group-ID, unter der Apache Anfragen bearbeitet


Seit Version 1.x; seit 2.0 nur noch Server
Seit Version 1.x; seit 2.0 nur noch Server Modul beos, mpmt_os2, prefork, worker; seit 2.3-beta mod_unixd
Modul beos, mpmt_os2, prefork, worker; seit 2.3-beta mod_unixd


Kontext Server
Kontext Server Syntax Group Gruppenname | #Gruppennr
Syntax Group Gruppenname | #Gruppennr.
Standardwert #-1
Standardwert #-1


Unter UNIX wird ein Prozess nicht nur unter einer User-ID, sondern auch unter
Unter UNIX wird ein Prozess nicht nur unter einer User-ID, sondern auch unter einer Group-ID ausgeführt
einer Group-ID ausgeführt. Diese Direktive setzt die Group-ID, unter der die Prozesse zur Verarbeitung von Anfragen laufen – der Hauptsteuerprozess ist hier, genau wie bei User, nicht betroffen. Gültige Werte für Group sind entweder ein
* Diese Direktive setzt die Group-ID, unter der die Prozesse zur Verarbeitung von Anfragen laufen – der Hauptsteuerprozess ist hier, genau wie bei User, nicht betroffen
Groupname oder eine Raute mit nachfolgender numerischer ID. Die Verwendung der Group-ID root ist natürlich wiederum tabu. Hier zwei Beispiele:
* Gültige Werte für Group sind entweder ein Groupname oder eine Raute mit nachfolgender numerischer ID
* Die Verwendung der Group-ID root ist natürlich wiederum tabu
* Hier zwei Beispiele


Group htgroup
Group htgroup Group #101
Group #101


Auch für Group ist der Standardwert -1 (nobody). Bereits bei der Beschreibung
Auch für Group ist der Standardwert -1 (nobody)
von User wurde gezeigt, wie Sie eine separate Group für den Webserver anlegen
* Bereits bei der Beschreibung von User wurde gezeigt, wie Sie eine separate Group für den Webserver anlegen können, um die Sicherheit noch weiter zu erhöhen
können, um die Sicherheit noch weiter zu erhöhen.


ListenBackLog
ListenBackLog Gibt die maximale Länge der Warteschlange für eingehende Verbindungsanfragen an
Gibt die maximale Länge der Warteschlange für eingehende Verbindungsanfragen an.


Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event
Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event Kontext Server Syntax ListenBackLog Anzahl Standardwert 511
Kontext Server
Syntax ListenBackLog Anzahl
Standardwert 511


Es wurde in diesem Buch bereits beschrieben, dass zur Verarbeitung eingehender
Es wurde in diesem Buch bereits beschrieben, dass zur Verarbeitung eingehender Anfragen normalerweise immer ein gewisser Vorrat an Prozessen oder Threads (je nach MPM) vorhanden ist
Anfragen normalerweise immer ein gewisser Vorrat an Prozessen oder Threads (je
* Bei Spitzenbelastung des Servers kann es allerdings vorkommen, dass er die Reserve-Prozesse beziehungsweise -Threads nicht schnell genug erzeugt
nach MPM) vorhanden ist. Bei Spitzenbelastung des Servers kann es allerdings
* Ist der Vorrat völlig aufgebraucht, dann werden weitere ankommende Anfragen in eine Warteschlange des lauschenden Sockets gestellt
vorkommen, dass er die Reserve-Prozesse beziehungsweise -Threads nicht schnell
* Diese Direktive definiert die maximale Anzahl wartender Verbindungen in dieser Warteschlange
genug erzeugt. Ist der Vorrat völlig aufgebraucht, dann werden weitere ankommende Anfragen in eine Warteschlange des lauschenden Sockets gestellt. Diese
* Sobald wieder Worker verfügbar sind, werden die Anfragen in Eingangsreihenfolge bearbeitet (FIFO-Prinzip)
Direktive definiert die maximale Anzahl wartender Verbindungen in dieser Warteschlange. Sobald wieder Worker verfügbar sind, werden die Anfragen in Eingangsreihenfolge bearbeitet (FIFO-Prinzip).


Normalerweise brauchen Sie den voreingestellten Wert niemals anzupassen. Es
Normalerweise brauchen Sie den voreingestellten Wert niemals anzupassen
kann höchstens angebracht sein, ihn kurzfristig massiv zu erhöhen, wenn Sie von
* Es kann höchstens angebracht sein, ihn kurzfristig massiv zu erhöhen, wenn Sie von einer SYN-Flood-Attacke betroffen sind (Überschwemmung durch eintreffende TCP-Pakete mit gesetztem SYN-Flag), damit die SYN-Flood-Pakete nicht den gesamten Vorrat für sich beanspruchen, was zum Denial of Service führt
einer SYN-Flood-Attacke betroffen sind (Überschwemmung durch eintreffende
TCP-Pakete mit gesetztem SYN-Flag), damit die SYN-Flood-Pakete nicht den
gesamten Vorrat für sich beanspruchen, was zum Denial of Service führt.


Der tatsächliche Maximalwert ist übrigens an die Kernel-Konstante SOMAXCONN
Der tatsächliche Maximalwert ist übrigens an die Kernel-Konstante SOMAXCONN gebunden, die angibt, wie viele Verbindungen ein lauschendes Socket überhaupt annehmen kann
gebunden, die angibt, wie viele Verbindungen ein lauschendes Socket überhaupt
* Wenn für ListenBackLog ein Wert angegeben wird, der SOMAXCONN übersteigt, dann wird dieser ignoriert
annehmen kann. Wenn für ListenBackLog ein Wert angegeben wird, der
* Wie sich SOMAXCONN gegebenenfalls anpassen lässt, entnehmen Sie bitte der Dokumentation Ihres Betriebssystems
SOMAXCONN übersteigt, dann wird dieser ignoriert. Wie sich SOMAXCONN gegebenenfalls anpassen lässt, entnehmen Sie bitte der Dokumentation Ihres Betriebssystems.


AcceptMutex
AcceptMutex Methode zur Serialisierung von Child-Prozessen, die Anfragen an NetzwerkSockets annehmen
Methode zur Serialisierung von Child-Prozessen, die Anfragen an NetzwerkSockets annehmen


Version 2.0 bis 2.2
Version 2.0 bis 2.2
Modul prefork, worker, event
Modul prefork, worker, event Kontext Server Syntax AcceptMutex Default|Methode Standardwert Default
Kontext Server
Syntax AcceptMutex Default|Methode
Standardwert Default


Die verschiedenen Worker-Child-Prozesse oder -Threads rufen für jedes lauschende Socket select() auf, um in Erfahrung zu bringen, ob an diesem Socket
Die verschiedenen Worker-Child-Prozesse oder -Threads rufen für jedes lauschende Socket select() auf, um in Erfahrung zu bringen, ob an diesem Socket eine Verbindungsanfrage wartet
eine Verbindungsanfrage wartet. Gleichzeitige select()-Aufrufe könnten dazu
* Gleichzeitige select()-Aufrufe könnten dazu führen, dass einer oder mehrere von ihnen blockieren
führen, dass einer oder mehrere von ihnen blockieren. Deshalb bestimmt diese
* Deshalb bestimmt diese Direktive, auf welche Weise Apache dafür sorgt, dass sie select() nur nacheinander aufrufen
Direktive, auf welche Weise Apache dafür sorgt, dass sie select() nur nacheinander aufrufen.


In Version 2.3.4 wurde die allgemeine Direktive Mutex eingeführt (siehe Seite
In Version 2.3.4 wurde die allgemeine Direktive Mutex eingeführt (siehe Seite
261), sodass AcceptMutex und andere spezifische Mutex-Direktiven abgeschafft
261), sodass AcceptMutex und andere spezifische Mutex-Direktiven abgeschafft wurden
wurden. Die möglichen Werte entsprechen den in der Beschreibung von Mutex
* Die möglichen Werte entsprechen den in der Beschreibung von Mutex angegebenen Methoden
angegebenen Methoden.


CoreDumpDirectory
CoreDumpDirectory Verzeichnis, in das Apache vor einem CoreDump zu wechseln versucht
Verzeichnis, in das Apache vor einem CoreDump zu wechseln versucht


Seit Version 2.0
Seit Version 2.0
Modul beos, mpm_winnt, prefork, worker, event
Modul beos, mpm_winnt, prefork, worker, event Kontext Server Syntax CoreDumpDirectory Verzeichnis Standardwert je nach Installationslayout
Kontext Server
Syntax CoreDumpDirectory Verzeichnis
Standardwert je nach Installationslayout


Wenn ein schwerwiegender Fehler auftritt, können Programme unter einigen
Wenn ein schwerwiegender Fehler auftritt, können Programme unter einigen Betriebssystemen einen CoreDump (Hauptspeicherauszug) in eine Datei schrei
Betriebssystemen einen CoreDump (Hauptspeicherauszug) in eine Datei schrei


ben. Die Direktive gibt das Verzeichnis an, in dem der CoreDump abgelegt werden soll. Da die User-ID, unter der Apache ausgeführt wird, in der Regel keine
ben
Schreibrechte für die ServerRoot haben sollte, müssen Sie ein anderes Verzeichnis angeben, wenn Sie CoreDumps zu Debugging-Zwecken benötigen.
* Die Direktive gibt das Verzeichnis an, in dem der CoreDump abgelegt werden soll
* Da die User-ID, unter der Apache ausgeführt wird, in der Regel keine Schreibrechte für die ServerRoot haben sollte, müssen Sie ein anderes Verzeichnis angeben, wenn Sie CoreDumps zu Debugging-Zwecken benötigen


LockFile
LockFile Pfad der Lock-Datei zur Serialisierung angenommener Anfragen
Pfad der Lock-Datei zur Serialisierung angenommener Anfragen


Modul prefork, worker
Modul prefork, worker Kontext Server Syntax LockFile Dateiname Standardwert logs/accept.lock
Kontext Server
Syntax LockFile Dateiname
Standardwert logs/accept.lock


Wenn für AcceptMutex über eine der beiden Einstellungen flock oder fcntl eine
Wenn für AcceptMutex über eine der beiden Einstellungen flock oder fcntl eine Dateisperre verwendet wird, um die Socket-Zugriffe von Anfragen zu serialisieren, wird eine Datei benötigt, auf der die Sperre errichtet werden kann
Dateisperre verwendet wird, um die Socket-Zugriffe von Anfragen zu serialisieren, wird eine Datei benötigt, auf der die Sperre errichtet werden kann. Die Direktive
* Die Direktive LockFile legt diese Datei fest
LockFile legt diese Datei fest. Aus Sicherheitsgründen sollte sie sich nicht in einem
* Aus Sicherheitsgründen sollte sie sich nicht in einem öffentlich zugänglichen Verzeichnis unterhalb der ServerRoot befinden
öffentlich zugänglichen Verzeichnis unterhalb der ServerRoot befinden.


MaxClients (seit 2.3.13 MaxRequestWorkers)
MaxClients (seit 2.3.13 MaxRequestWorkers)
Höchstzahl von Child-Prozessen, die zur Verarbeitung von Anfragen gestartet
Höchstzahl von Child-Prozessen, die zur Verarbeitung von Anfragen gestartet werden
werden


Modul beos, prefork, worker, event
Modul beos, prefork, worker, event Kontext Server Syntax MaxClients Anzahl Standardwert je nach MPM verschieden
Kontext Server
Syntax MaxClients Anzahl
Standardwert je nach MPM verschieden


Diese Direktive legt die maximale Anzahl von Child-Prozessen beziehungsweise
Diese Direktive legt die maximale Anzahl von Child-Prozessen beziehungsweise Threads fest, die Apache insgesamt zur Annahme von Client-Anfragen startet
Threads fest, die Apache insgesamt zur Annahme von Client-Anfragen startet. Sie
* Sie brauchen den hier festgelegten Wert nur dann zu erhöhen, wenn Sie durch Benchmarks oder Logfile-Auswertung feststellen sollten, dass Ihr Server mit der Anzahl der ankommenden Anfragen nicht zurechtkommt
brauchen den hier festgelegten Wert nur dann zu erhöhen, wenn Sie durch
* Allerdings müssen Sie in diesem Fall zunächst die Direktive ServerLimit anpassen, um die maximal einstellbare Anzahl von Prozessen oder Threads zu erhöhen
Benchmarks oder Logfile-Auswertung feststellen sollten, dass Ihr Server mit der
* Der Vorgabewert ist je nach MPM unterschiedlich
Anzahl der ankommenden Anfragen nicht zurechtkommt. Allerdings müssen Sie
in diesem Fall zunächst die Direktive ServerLimit anpassen, um die maximal einstellbare Anzahl von Prozessen oder Threads zu erhöhen. Der Vorgabewert ist je
nach MPM unterschiedlich:


* prefork: 256 Child-Prozesse
* prefork: 256 Child-Prozesse
Zeile 579: Zeile 466:
* beos: 50 Threads
* beos: 50 Threads


MaxMemFree
MaxMemFree Maximale Speichermenge, die die Speicherverwaltung ohne free()-Aufruf verwalten darf
Maximale Speichermenge, die die Speicherverwaltung ohne free()-Aufruf verwalten darf


Modul beos, mpm_netware, mpm_winnt, prefork, worker, event
Modul beos, mpm_netware, mpm_winnt, prefork, worker, event Kontext Server Syntax MaxMemFree KBytes Standardwert 0
Kontext Server
Syntax MaxMemFree KBytes
Standardwert 0


Mithilfe dieser Direktive können Sie die Arbeitsspeichermenge begrenzen, über
Mithilfe dieser Direktive können Sie die Arbeitsspeichermenge begrenzen, über die die Hauptspeicher-Zuteilungsroutine des Servers verfügen darf, ohne mittels free() wieder Speicher freizugeben
die die Hauptspeicher-Zuteilungsroutine des Servers verfügen darf, ohne mittels
* Der Vorgabewert 0 bedeutet, dass keine Beschränkung existiert
free() wieder Speicher freizugeben. Der Vorgabewert 0 bedeutet, dass keine
Beschränkung existiert.


MaxRequestsPerChild (seit 2.3.9 MaxConnectionsPerChild)
MaxRequestsPerChild (seit 2.3.9 MaxConnectionsPerChild)
Maximale Anzahl von Anfragen, die ein Child-Prozess nacheinander abarbeitet
Maximale Anzahl von Anfragen, die ein Child-Prozess nacheinander abarbeitet


Modul mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event
Modul mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event Kontext Server Syntax MaxRequestsPerChild Anzahl Standardwert meist 10000 (siehe Beschreibung)
Kontext Server
Syntax MaxRequestsPerChild Anzahl
Standardwert meist 10000 (siehe Beschreibung)


Die Direktive bestimmt indirekt die Lebensdauer eines Worker-Prozesses, der für
Die Direktive bestimmt indirekt die Lebensdauer eines Worker-Prozesses, der für die Bearbeitung von Client-Anfragen zuständig ist: Nach der Verarbeitung der angegebenen Anzahl von Anfragen (beziehungsweise persistenten Verbindungen) wird der Prozess beendet
die Bearbeitung von Client-Anfragen zuständig ist: Nach der Verarbeitung der
* Dies ermöglicht ein allmähliches Verringern der Prozessanzahl, wenn die Anfragelast nachlässt
angegebenen Anzahl von Anfragen (beziehungsweise persistenten Verbindungen) wird der Prozess beendet. Dies ermöglicht ein allmähliches Verringern der
Prozessanzahl, wenn die Anfragelast nachlässt.


Der spezielle Wert 0 bedeutet, dass die Lebensdauer eines Prozesses nicht eingeschränkt wird. Bei mpm_winnt und mpm_netware ist dieser Wert aufgrund der Plattformbesonderheiten voreingestellt.
Der spezielle Wert 0 bedeutet, dass die Lebensdauer eines Prozesses nicht eingeschränkt wird
* Bei mpm_winnt und mpm_netware ist dieser Wert aufgrund der Plattformbesonderheiten voreingestellt


MaxSpareThreads
MaxSpareThreads Maximale Anzahl von Reserve-Threads
Maximale Anzahl von Reserve-Threads


Modul beos, mpm_netware, mpmt_os2, worker, event
Modul beos, mpm_netware, mpmt_os2, worker, event Kontext Server Syntax MaxSpareThreads Anzahl Standardwert je nach MPM verschieden
Kontext Server
Syntax MaxSpareThreads Anzahl
Standardwert je nach MPM verschieden


Diese Direktive legt bei Thread-basierten MPMs die Höchstzahl von ReserveThreads fest, die für die Verarbeitung einer Verbindung bereitstehen. Für die verschiedenen MPMs sind folgende Werte vorgegeben:
Diese Direktive legt bei Thread-basierten MPMs die Höchstzahl von ReserveThreads fest, die für die Verarbeitung einer Verbindung bereitstehen
* Für die verschiedenen MPMs sind folgende Werte vorgegeben


* worker, event: 250. Hier geht es um die Anzahl der Threads insgesamt. Der
* worker, event: 250
Wert kann nicht kleiner als MinSpareThreads + ThreadsPerChild sein.
* Hier geht es um die Anzahl der Threads insgesamt
* mpm_netware: 100 (Gesamtzahl). Der Wert muss größer sein als
* Der Wert kann nicht kleiner als MinSpareThreads + ThreadsPerChild sein
MinSpareThreads.
* mpm_netware: 100 (Gesamtzahl)
* Der Wert muss größer sein als MinSpareThreads


* beos: 50 (Gesamtzahl)
* beos: 50 (Gesamtzahl)
* mpmt_os2: 10 (Gesamtzahl)
* mpmt_os2: 10 (Gesamtzahl)


MinSpareThreads
MinSpareThreads Mindestzahl von Reserve-Threads
Mindestzahl von Reserve-Threads


Modul beos, mpm_netware, mpmt_os2, worker, event
Modul beos, mpm_netware, mpmt_os2, worker, event Kontext Server Syntax MinSpareThreads Anzahl Standardwert je nach MPM verschieden
Kontext Server
Syntax MinSpareThreads Anzahl
Standardwert je nach MPM verschieden


Die Direktive MinSpareThreads bestimmt bei Thread-basierten MPMs die Mindestzahl der Reserve-Threads. Wie bei MaxSpareThreads gibt es Unterschiede zwischen den Standardwerten der einzelnen MPM-Module:
Die Direktive MinSpareThreads bestimmt bei Thread-basierten MPMs die Mindestzahl der Reserve-Threads
* Wie bei MaxSpareThreads gibt es Unterschiede zwischen den Standardwerten der einzelnen MPM-Module


* worker, event: Gesamtwert 75
* worker, event: Gesamtwert 75
Zeile 640: Zeile 512:
* mpmt_os2: Gesamtwert 5
* mpmt_os2: Gesamtwert 5


ScoreBoardFile
ScoreBoardFile Pfad der Datei zur Koordination von Child-Prozessen
Pfad der Datei zur Koordination von Child-Prozessen


Modul mpm_common
Modul mpm_common Kontext beos, mpm_winnt, prefork, worker, event Syntax ScoreBoardFile Dateiname Standardwert logs/apache_status
Kontext beos, mpm_winnt, prefork, worker, event
Syntax ScoreBoardFile Dateiname
Standardwert logs/apache_status


Ein ScoreBoardFile ist eine Datei, die zur Kommunikation zwischen Parent- und
Ein ScoreBoardFile ist eine Datei, die zur Kommunikation zwischen Parent- und Child-Prozessen eingesetzt wird
Child-Prozessen eingesetzt wird. Wenn die Direktive nicht in der Konfigurationsdatei steht, wird anstelle einer Datei ein Shared-Memory-Segment verwendet.
* Wenn die Direktive nicht in der Konfigurationsdatei steht, wird anstelle einer Datei ein Shared-Memory-Segment verwendet


Solange Sie kein externes Modul verwenden, das explizit auf das ScoreBoard
Solange Sie kein externes Modul verwenden, das explizit auf das ScoreBoard zugreifen muss, ist dies aus Performance- und Sicherheitsgründen zu bevorzugen
zugreifen muss, ist dies aus Performance- und Sicherheitsgründen zu bevorzugen.


SendBufferSize
SendBufferSize Größe des TCP-Sendepuffers
Größe des TCP-Sendepuffers


Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event
Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event Kontext Server Syntax SendBufferSize Bytes Standardwert 0
Kontext Server
Syntax SendBufferSize Bytes
Standardwert 0


Die Größe des TCP-Sendepuffers wird auf den angegebenen Wert gesetzt. Die
Die Größe des TCP-Sendepuffers wird auf den angegebenen Wert gesetzt
Voreinstellung 0 bedeutet, dass der Standardwert des zugrunde liegenden
* Die Voreinstellung 0 bedeutet, dass der Standardwert des zugrunde liegenden Betriebssystems verwendet werden soll
Betriebssystems verwendet werden soll. Das ist normalerweise in Ordnung. Es
* Das ist normalerweise in Ordnung
sei denn, Sie verwenden ein veraltetes Betriebssystem mit einer sehr schnellen
* Es sei denn, Sie verwenden ein veraltetes Betriebssystem mit einer sehr schnellen Netzwerkverbindung – dann sollten Sie aus Performance-Gründen manuell einen höheren Wert angeben als die Systemvorgabe
Netzwerkverbindung – dann sollten Sie aus Performance-Gründen manuell einen
höheren Wert angeben als die Systemvorgabe.


ReceiveBufferSize
ReceiveBufferSize Größe des TCP-Empfangspuffers
Größe des TCP-Empfangspuffers


Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event
Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event Kontext Server Syntax ReceiveBufferSize Bytes Standardwert 0
Kontext Server
Syntax ReceiveBufferSize Bytes
Standardwert 0


Diese Direktive stellt analog zu SendBufferSize die Größe des TCP-Empfangspuffers ein. Auch hier steht der Standardwert 0 für den Standard des Betriebssystems.
Diese Direktive stellt analog zu SendBufferSize die Größe des TCP-Empfangspuffers ein
* Auch hier steht der Standardwert 0 für den Standard des Betriebssystems


ServerLimit
ServerLimit Absolute Höchstgrenze für die Anzahl von Prozessen
Absolute Höchstgrenze für die Anzahl von Prozessen


Modul prefork, worker
Modul prefork, worker Kontext Server Syntax ServerLimit Anzahl Standardwert je nach MPM verschieden
Kontext Server
Syntax ServerLimit Anzahl
Standardwert je nach MPM verschieden


Diese Direktive legt den Höchstwert fest, der überhaupt für MaxClients (beziehungsweise NumServers beim MPM perchild) eingestellt werden darf. Für die
Diese Direktive legt den Höchstwert fest, der überhaupt für MaxClients (beziehungsweise NumServers beim MPM perchild) eingestellt werden darf
einzelnen MPM-Module hat dies unterschiedliche Auswirkungen:
* Für die einzelnen MPM-Module hat dies unterschiedliche Auswirkungen


* prefork: Die Voreinstellung ist 256. Wenn Sie für MaxClients – bei diesem
* prefork: Die Voreinstellung ist 256
MPM die Höchstzahl der Child-Prozesse insgesamt – einen höheren Wert einstellen möchten, müssen Sie zuerst ServerLimit auf diesen Wert setzen.
* Wenn Sie für MaxClients – bei diesem MPM die Höchstzahl der Child-Prozesse insgesamt – einen höheren Wert einstellen möchten, müssen Sie zuerst ServerLimit auf diesen Wert setzen
* worker, event: Der Standardwert ist 16 für die höchste einstellbare Anzahl von
* worker, event: Der Standardwert ist 16 für die höchste einstellbare Anzahl von Thread-verwaltenden Child-Prozessen
Thread-verwaltenden Child-Prozessen. Die Gesamtzahl der Worker-Threads ist
* Die Gesamtzahl der Worker-Threads ist das Produkt von ServerLimit und ThreadsPerChild
das Produkt von ServerLimit und ThreadsPerChild. Erhöhen Sie im Bedarfsfall
* Erhöhen Sie im Bedarfsfall einen dieser beiden Werte, wenn Sie insgesamt mehr Threads benötigen
einen dieser beiden Werte, wenn Sie insgesamt mehr Threads benötigen.


Wie bereits erwähnt, muss Apache komplett beendet und wieder gestartet werden, um diesen Wert anzupassen; ein automatischer Neustart genügt nicht.
Wie bereits erwähnt, muss Apache komplett beendet und wieder gestartet werden, um diesen Wert anzupassen; ein automatischer Neustart genügt nicht


Wenn Sie einen ungewöhnlich hohen Wert einstellen möchten, müssen Sie
Wenn Sie einen ungewöhnlich hohen Wert einstellen möchten, müssen Sie configure bei der Kompilierung mit dem Compiler-Flag HARD_SERVER_LIMIT aufrufen
configure bei der Kompilierung mit dem Compiler-Flag HARD_SERVER_LIMIT aufrufen. Beispiel:
* Beispiel


./configure ... CFLAGS="-D HARD_SERVER_LIMIT=2048"
./configure ..
* CFLAGS="-D HARD_SERVER_LIMIT=2048"


StartServers
StartServers Anzahl von Child-Prozessen, die beim Start erzeugt werden
Anzahl von Child-Prozessen, die beim Start erzeugt werden


Modul mpmt_os2, prefork, worker, event
Modul mpmt_os2, prefork, worker, event Kontext Server Syntax StartServers Anzahl Standardwert je nach MPM verschieden
Kontext Server
Syntax StartServers Anzahl
Standardwert je nach MPM verschieden


Über diese Direktive wird festgelegt, wie viele Child-Prozesse beim Start des Servers erzeugt werden. Diese Anzahl wird zur Laufzeit gemäß den Angaben in den
Über diese Direktive wird festgelegt, wie viele Child-Prozesse beim Start des Servers erzeugt werden
anderen Direktiven für die Prozessanzahl der Server-Last angepasst. Deshalb gibt
* Diese Anzahl wird zur Laufzeit gemäß den Angaben in den anderen Direktiven für die Prozessanzahl der Server-Last angepasst
es in der Regel wenig Veranlassung, die Voreinstellung zu ändern. Für die einzelnen MPMs gelten folgende Standardwerte:
* Deshalb gibt es in der Regel wenig Veranlassung, die Voreinstellung zu ändern
* Für die einzelnen MPMs gelten folgende Standardwerte


* prefork: 5
* prefork: 5
Zeile 720: Zeile 571:
* mpmt_os2: 2
* mpmt_os2: 2


StartThreads
StartThreads Anzahl von Threads, die beim Start erzeugt werden
Anzahl von Threads, die beim Start erzeugt werden


Modul beos, mpm_netware
Modul beos, mpm_netware Kontext Server Syntax StartThreads Anzahl Standardwert je nach MPM verschieden
Kontext Server
Syntax StartThreads Anzahl
Standardwert je nach MPM verschieden


Bei den Thread-basierten MPMs beos und mpm_netware übernimmt diese Direktive
Bei den Thread-basierten MPMs beos und mpm_netware übernimmt diese Direktive die Aufgabe von StartServers: Sie bestimmt, wie viele Threads beim Start des Servers erzeugt werden
die Aufgabe von StartServers: Sie bestimmt, wie viele Threads beim Start des Servers erzeugt werden. Da Apache bei Bedarf zusätzliche Threads startet, muss auch
* Da Apache bei Bedarf zusätzliche Threads startet, muss auch dieser Wert normalerweise nicht geändert werden
dieser Wert normalerweise nicht geändert werden. Hier die Standardwerte:
* Hier die Standardwerte
* mpm_netware: 50 (Gesamtzahl der gestarteten Threads)
* mpm_netware: 50 (Gesamtzahl der gestarteten Threads)
* beos: 10 (ebenfalls insgesamt)
* beos: 10 (ebenfalls insgesamt)


ThreadLimit
ThreadLimit Absolute Höchstzahl von Threads
Absolute Höchstzahl von Threads


Seit Version 2.0; für mpm_winnt seit 2.0.41
Seit Version 2.0; für mpm_winnt seit 2.0.41
Modul mpm_winnt, worker, event
Modul mpm_winnt, worker, event Kontext Server Syntax ThreadLimit Anzahl Standardwert je nach MPM verschieden
Kontext Server
Syntax ThreadLimit Anzahl
Standardwert je nach MPM verschieden


Dieser Wert bestimmt die maximale Anzahl von Threads, die für ThreadsPerChild
Dieser Wert bestimmt die maximale Anzahl von Threads, die für ThreadsPerChild angegeben werden kann
angegeben werden kann. Sie sollten die Direktive nur anpassen, wenn Sie den
* Sie sollten die Direktive nur anpassen, wenn Sie den Wert von ThreadsPerChild erhöhen müssen
Wert von ThreadsPerChild erhöhen müssen. Um kein unnötiges Shared Memory
* Um kein unnötiges Shared Memory zu vergeuden, sollte ThreadLimit keinen höheren Wert erhalten als den für ThreadsPerChild benötigten
zu vergeuden, sollte ThreadLimit keinen höheren Wert erhalten als den für
ThreadsPerChild benötigten.


Der Standardwert ist für mpm_winnt 1.920 und für alle anderen MPMs 64. Der
Der Standardwert ist für mpm_winnt 1.920 und für alle anderen MPMs 64
Quellcode enthält einen fest einprogrammierten Maximalwert von 20.000
* Der Quellcode enthält einen fest einprogrammierten Maximalwert von 20.000
(beziehungsweise 15.000 bei mpm_winnt).
(beziehungsweise 15.000 bei mpm_winnt)


Es wurde bereits darauf hingewiesen, dass der Server komplett beendet und wieder gestartet werden muss, um diesen Wert anzupassen.
Es wurde bereits darauf hingewiesen, dass der Server komplett beendet und wieder gestartet werden muss, um diesen Wert anzupassen


ThreadsPerChild
ThreadsPerChild Anzahl der Threads pro Child-Prozess
Anzahl der Threads pro Child-Prozess


Modul mpm_winnt, worker, event
Modul mpm_winnt, worker, event Kontext Server
Kontext Server


Syntax ThreadsPerChild Anzahl
Syntax ThreadsPerChild Anzahl Standardwert je nach MPM verschieden
Standardwert je nach MPM verschieden


Diese Direktive legt fest, wie viele Threads ein einzelner Verwaltungs-Child-Prozess startet. Dies hat je nach MPM unterschiedliche Folgen:
Diese Direktive legt fest, wie viele Threads ein einzelner Verwaltungs-Child-Prozess startet
* Dies hat je nach MPM unterschiedliche Folgen


* worker, event: Bei diesen MPM-Modulen existieren mehrere Child-Prozesse.
* worker, event: Bei diesen MPM-Modulen existieren mehrere Child-Prozesse
Der Standardwert beträgt 25 und kann erhöht werden, wenn die Gesamtzahl
Der Standardwert beträgt 25 und kann erhöht werden, wenn die Gesamtzahl der Worker (Child-Prozesse * Threads) für die Server-Last nicht ausreicht
der Worker (Child-Prozesse * Threads) für die Server-Last nicht ausreicht.
* mpm_winnt: Da unter Windows nur ein einziger Child-Prozess zur Verwaltung der Worker-Threads existiert, muss der hier angegebene Wert der maximalen Anzahl gleichzeitiger Anfragen entsprechen, die der Server bewältigen muss
* mpm_winnt: Da unter Windows nur ein einziger Child-Prozess zur Verwaltung
Die Voreinstellung liegt bei 64, und es ist wahrscheinlich, dass Sie sie für einen Produktionsserver erhöhen müssen
der Worker-Threads existiert, muss der hier angegebene Wert der maximalen
Anzahl gleichzeitiger Anfragen entsprechen, die der Server bewältigen muss.
Die Voreinstellung liegt bei 64, und es ist wahrscheinlich, dass Sie sie für
einen Produktionsserver erhöhen müssen.


MaxSpareServers
MaxSpareServers Maximale Anzahl von Reserve-Child-Prozessen
Maximale Anzahl von Reserve-Child-Prozessen


Modul mpm_prefork
Modul mpm_prefork Kontext Server Syntax MaxSpareServers Anzahl Standardwert 10
Kontext Server
Syntax MaxSpareServers Anzahl
Standardwert 10


Diese Direktive bestimmt, wie viele unbeschäftigte Prozesse maximal als Reserve
Diese Direktive bestimmt, wie viele unbeschäftigte Prozesse maximal als Reserve auf Anfragen warten sollen
auf Anfragen warten sollen. Sollte die Anzahl über den hier eingestellten Wert
* Sollte die Anzahl über den hier eingestellten Wert hinausgehen, werden die überschüssigen Prozesse beendet
hinausgehen, werden die überschüssigen Prozesse beendet.


Sie brauchen nur bei sehr stark beanspruchten Servern einen höheren Wert als
Sie brauchen nur bei sehr stark beanspruchten Servern einen höheren Wert als voreingestellt
voreingestellt. Wenn Sie einen Wert verwenden, der kleiner als MinSpareServers
* Wenn Sie einen Wert verwenden, der kleiner als MinSpareServers ist, wird er auf MinSpareServers +1 gesetzt
ist, wird er auf MinSpareServers +1 gesetzt.


MinSpareServers
MinSpareServers Mindestzahl von Reserve-Child-Prozessen
Mindestzahl von Reserve-Child-Prozessen


Modul mpm_prefork
Modul mpm_prefork Kontext Server Syntax MinSpareServers Anzahl Standardwert 5
Kontext Server
Syntax MinSpareServers Anzahl
Standardwert 5


Mithilfe von MinSpareServers können Sie festlegen, wie viele unbeschäftigte
Mithilfe von MinSpareServers können Sie festlegen, wie viele unbeschäftigte Child-Prozesse mindestens als Reserve auf Client-Anfragen warten sollen
Child-Prozesse mindestens als Reserve auf Client-Anfragen warten sollen. Wenn
* Wenn


weniger Prozesse frei sind als hier eingestellt, erzeugt Apache neue, und zwar
weniger Prozesse frei sind als hier eingestellt, erzeugt Apache neue, und zwar höchstens einen pro Sekunde
höchstens einen pro Sekunde. In der Regel muss der Wert nicht geändert werden.
* In der Regel muss der Wert nicht geändert werden
Nur bei besonders belasteten Sites müssen Sie ihn möglicherweise erhöhen.
Nur bei besonders belasteten Sites müssen Sie ihn möglicherweise erhöhen


MaxRequestsPerThread
MaxRequestsPerThread Maximale Anzahl von Anfragen, die ein Thread nacheinander abarbeitet
Maximale Anzahl von Anfragen, die ein Thread nacheinander abarbeitet


Version 2.0 und 2.2 (nur BeOS)
Version 2.0 und 2.2 (nur BeOS)
Modul mpm_beos
Modul mpm_beos Kontext Server Syntax MaxRequestsPerThread Anzahl Standardwert 0
Kontext Server
Syntax MaxRequestsPerThread Anzahl
Standardwert 0


Diese Direktive bestimmt unter BeOS indirekt die Lebensdauer eines Threads
Diese Direktive bestimmt unter BeOS indirekt die Lebensdauer eines Threads und ähnelt damit der für Prozesse zuständigen Einstellung MaxRequestsPerChild
und ähnelt damit der für Prozesse zuständigen Einstellung MaxRequestsPerChild:
Sie legt fest, wie viele Anfragen beziehungsweise persistente Verbindungen ein Thread verarbeitet, bevor er beendet wird
Sie legt fest, wie viele Anfragen beziehungsweise persistente Verbindungen ein
* Wenn Sie die Voreinstellung 0 (unbegrenzte Lebensdauer) ändern, kann der Server schneller auf eine Verringerung der Anfragelast reagieren und so Ressourcen freigeben
Thread verarbeitet, bevor er beendet wird. Wenn Sie die Voreinstellung 0 (unbegrenzte Lebensdauer) ändern, kann der Server schneller auf eine Verringerung
der Anfragelast reagieren und so Ressourcen freigeben.


MaxThreads
MaxThreads Maximale Anzahl von Worker-Threads
Maximale Anzahl von Worker-Threads


Seit Version 2.0 (nur NetWare)
Seit Version 2.0 (nur NetWare)
Modul mpm_netware
Modul mpm_netware Kontext Server Syntax MaxThreads Anzahl Standardwert 2.048
Kontext Server
Syntax MaxThreads Anzahl
Standardwert 2.048


Diese Direktive ist nur unter Novell NetWare verfügbar. Sie bestimmt die maximale Anzahl von Threads, die Anfragen beantworten, und ähnelt so der für
Diese Direktive ist nur unter Novell NetWare verfügbar
andere MPMs definierten Direktive ThreadsPerChild. Da der Standardwert dem
* Sie bestimmt die maximale Anzahl von Threads, die Anfragen beantworten, und ähnelt so der für andere MPMs definierten Direktive ThreadsPerChild
einkompilierten Maximum entspricht, können Sie den Wert lediglich verringern.
* Da der Standardwert dem einkompilierten Maximum entspricht, können Sie den Wert lediglich verringern


ThreadStackSize
ThreadStackSize Größe des Stacks pro Thread
Größe des Stacks pro Thread


Seit Version 2.0 (nur NetWare)
Seit Version 2.0 (nur NetWare)
Modul mpm_netware
Modul mpm_netware Kontext Server
Kontext Server


Syntax ThreadStackSize Anzahl
Syntax ThreadStackSize Anzahl Standardwert 65.536
Standardwert 65.536


Mit dieser Direktive wird die maximale Größe des Stacks für einen einzelnen
Mit dieser Direktive wird die maximale Größe des Stacks für einen einzelnen Thread festgelegt
Thread festgelegt. Sie muss nur erhöht werden, falls ein Stack-Overflow auftreten
* Sie muss nur erhöht werden, falls ein Stack-Overflow auftreten sollte
sollte.


Win32DisableAcceptEx
Win32DisableAcceptEx AcceptEx() deaktivieren, falls inkompatibel
AcceptEx() deaktivieren, falls inkompatibel


Seit Version 2.0.49 bis 2.2.x
Seit Version 2.0.49 bis 2.2.x Modul mpm_winnt Kontext Server Syntax Win32DisableAcceptEx Standardwert nicht gesetzt
Modul mpm_winnt
Kontext Server
Syntax Win32DisableAcceptEx
Standardwert nicht gesetzt


Unter Windows wird standardmäßig die Winsock2-Funktion AcceptEx() verwendet, die gegenüber dem klassischen BSD-Systemaufruf accept() einen Performance-Gewinn liefert. Dies kann allerdings zur Inkompatibilität mit einigen
Unter Windows wird standardmäßig die Winsock2-Funktion AcceptEx() verwendet, die gegenüber dem klassischen BSD-Systemaufruf accept() einen Performance-Gewinn liefert
anderen Programmen führen, z.B. mit VPN-Software oder Antivirus-Programmen. Ein solches Problem kann sich in einer Fehlermeldung wie dieser äußern:
* Dies kann allerdings zur Inkompatibilität mit einigen anderen Programmen führen, z.B
* mit VPN-Software oder Antivirus-Programmen
* Ein solches Problem kann sich in einer Fehlermeldung wie dieser äußern


[error] (730038)An operation was attempted on something that
[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed
is not a socket.: winnt_accept: AcceptEx failed. Attempting
* Attempting to recover
to recover.


Wenn Sie diese Direktive (ohne Wert) in Ihre Konfigurationsdatei setzen, wird
Wenn Sie diese Direktive (ohne Wert) in Ihre Konfigurationsdatei setzen, wird AcceptEx() deaktiviert
AcceptEx() deaktiviert. Sie sollten sie also verwenden, falls das geschilderte Problem bei Ihnen auftritt. Ab Apache 2.3 wird AcceptFilter für die entsprechenden Einstellungen verwendet.
* Sie sollten sie also verwenden, falls das geschilderte Problem bei Ihnen auftritt
* Ab Apache 2.3 wird AcceptFilter für die entsprechenden Einstellungen verwendet


== Hauptserver ==
== Hauptserver ==
Der zweite Abschnitt der Konfigurationsdatei httpd.conf ist wie erwähnt für die
Der zweite Abschnitt der Konfigurationsdatei httpd.conf ist wie erwähnt für die Einstellungen der Standard-Website zuständig, die der Server veröffentlicht
Einstellungen der Standard-Website zuständig, die der Server veröffentlicht. Hier
* Hier befinden sich also beispielsweise die DocumentRoot (das Basisverzeichnis) der Site sowie sämtliche Zugriffs- und Authentifizierungseinstellungen
befinden sich also beispielsweise die DocumentRoot (das Basisverzeichnis) der Site
* In der offiziellen Vorlage der httpd.conf hieß es früher über diesen Abschnitt
sowie sämtliche Zugriffs- und Authentifizierungseinstellungen. In der offiziellen
Vorlage der httpd.conf hieß es früher über diesen Abschnitt:


### Section 2: 'Main' server configuration
### Section 2: 'Main' server configuration
Zeile 879: Zeile 685:
# 'main' server, which responds to any requests that aren't
# 'main' server, which responds to any requests that aren't


# handled by a <VirtualHost> definition. These values also
# handled by a <VirtualHost> definition
* These values also
# provide defaults for any <VirtualHost> containers you may
# provide defaults for any <VirtualHost> containers you may
# define later in the file.
# define later in the file


Der »Hauptserver« behandelt nach dieser Beschreibung sämtliche Anfragen, für
Der »Hauptserver« behandelt nach dieser Beschreibung sämtliche Anfragen, für die kein spezieller virtueller Host konfiguriert ist
die kein spezieller virtueller Host konfiguriert ist. Außerdem werden alle hier
* Außerdem werden alle hier vorgenommenen Grundeinstellungen zunächst von jedem virtuellen Host übernommen, sofern sie in dessen Konfiguration nicht überschrieben werden
vorgenommenen Grundeinstellungen zunächst von jedem virtuellen Host übernommen, sofern sie in dessen Konfiguration nicht überschrieben werden. Umgekehrt gilt natürlich, dass viele der hier vorgestellten Direktiven für einzelne virtuelle Hosts überschrieben werden können und oft sogar sollten.
* Umgekehrt gilt natürlich, dass viele der hier vorgestellten Direktiven für einzelne virtuelle Hosts überschrieben werden können und oft sogar sollten


ServerAdmin
ServerAdmin E-Mail-Adresse des Server-Administrators für automatisch generierte Fehlermeldungsseiten
E-Mail-Adresse des Server-Administrators für automatisch generierte Fehlermeldungsseiten


Modul core
Modul core Kontext Server, <VirtualHost>
Kontext Server, <VirtualHost>
Syntax ServerAdmin E-Mail-Adresse Standardwert nicht gesetzt
Syntax ServerAdmin E-Mail-Adresse
Standardwert nicht gesetzt


Wenn Apache bei der Beantwortung von Anfragen auf Probleme stößt, erzeugt er
Wenn Apache bei der Beantwortung von Anfragen auf Probleme stößt, erzeugt er angepasste Fehlermeldungsseiten (festgelegt durch die Direktive ErrorDocument)
angepasste Fehlermeldungsseiten (festgelegt durch die Direktive ErrorDocument).
Auf Wunsch kann eine solche Seite einen Link auf Ihre E-Mail-Adresse enthalten, damit Benutzer der Website Ihnen Probleme mitteilen können
Auf Wunsch kann eine solche Seite einen Link auf Ihre E-Mail-Adresse enthalten, damit Benutzer der Website Ihnen Probleme mitteilen können. Die Direktive
* Die Direktive ServerAdmin legt diese Adresse fest
ServerAdmin legt diese Adresse fest. Beispiel:
* Beispiel


ServerAdmin webmaster@mynet.de
ServerAdmin webmaster@mynet.de


ServerName
ServerName Hostname und TCP-Port des Servers
Hostname und TCP-Port des Servers


Seit Version 2.0 (früher Port)
Seit Version 2.0 (früher Port)
Modul core
Modul core Kontext Server, <VirtualHost>
Kontext Server, <VirtualHost>
Syntax ServerName voll.qualifizierter.domain.name [:Port]
Syntax ServerName voll.qualifizierter.domain.name [:Port]
Standardwert nicht gesetzt
Standardwert nicht gesetzt


Mithilfe dieser Direktive wird der Domain-Name des Servers angegeben, optional gefolgt von einer TCP-Portnummer. Die Konfigurationsanweisung bestimmt
Mithilfe dieser Direktive wird der Domain-Name des Servers angegeben, optional gefolgt von einer TCP-Portnummer
nicht etwa, wie Listen, auf welche Anfragen Apache überhaupt reagiert. Sie legt
* Die Konfigurationsanweisung bestimmt nicht etwa, wie Listen, auf welche Anfragen Apache überhaupt reagiert
den Server-Namen auch nicht nach außen fest – das funktioniert im Internet nur
* Sie legt den Server-Namen auch nicht nach außen fest – das funktioniert im Internet nur


über DNS. Der hier angegebene Name dient vielmehr der Selbstidentifikation
über DNS
des Servers. Ob er auch für selbst referenzierte URLs benutzt wird, regelt die
* Der hier angegebene Name dient vielmehr der Selbstidentifikation des Servers
Direktive UseCanonicalName.
* Ob er auch für selbst referenzierte URLs benutzt wird, regelt die Direktive UseCanonicalName


Es ist auf jeden Fall wichtig, dass der festgelegte Name auf irgendeine Weise in
Es ist auf jeden Fall wichtig, dass der festgelegte Name auf irgendeine Weise in eine IP-Adresse aufgelöst werden kann: bei einem öffentlich zugänglichen Produktionsserver natürlich über DNS; bei einem neu eingerichteten Server, den Sie testen möchten, können Sie den Namen dagegen in Ihre hosts-Datei eintragen
eine IP-Adresse aufgelöst werden kann: bei einem öffentlich zugänglichen Produktionsserver natürlich über DNS; bei einem neu eingerichteten Server, den Sie
(siehe Kapitel 5, »Apache in Betrieb nehmen«)
testen möchten, können Sie den Namen dagegen in Ihre hosts-Datei eintragen
* Hier ein Beispiel
(siehe Kapitel 5, »Apache in Betrieb nehmen«). Hier ein Beispiel:


ServerName www.mynet.de:80
ServerName www.mynet.de:80


UseCanonicalName
UseCanonicalName Legt fest, woher der Server seinen eigenen Hostnamen für selbst referenzierte URLs erhält
Legt fest, woher der Server seinen eigenen Hostnamen für selbst referenzierte
URLs erhält.


Modul core
Modul core Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>
Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>
Syntax UseCanonicalName On|Off|DNS Standardwert Off (bis 2.0 On)
Syntax UseCanonicalName On|Off|DNS
Standardwert Off (bis 2.0 On)


Bei Weiterleitungen, automatisch generierten Fehlermeldungsseiten und ähnlichen Gelegenheiten muss Apache selbst referenzierte URLs erzeugen, also absolute URLs, die wieder auf den Server-Host selbst zeigen. Diese Direktive
Bei Weiterleitungen, automatisch generierten Fehlermeldungsseiten und ähnlichen Gelegenheiten muss Apache selbst referenzierte URLs erzeugen, also absolute URLs, die wieder auf den Server-Host selbst zeigen
bestimmt, wie der Host- beziehungsweise Domain-Name für diese URLs
* Diese Direktive bestimmt, wie der Host- beziehungsweise Domain-Name für diese URLs bestimmt wird
bestimmt wird. Es gibt drei mögliche Werte:
* Es gibt drei mögliche Werte


* On: Apache verwendet den Hostnamen und den Port, der mithilfe der Direktive ServerName festgelegt wurde.
* On: Apache verwendet den Hostnamen und den Port, der mithilfe der Direktive ServerName festgelegt wurde
* Off: Es werden der Hostname und der Port benutzt, die der Client in der
* Off: Es werden der Hostname und der Port benutzt, die der Client in der Anfrage übermittelt hat
Anfrage übermittelt hat.
* DNS: Der Hostname wird durch einen Reverse-DNS-Lookup ermittelt, das heißt, er erfragt über das Domain Name System den Hostnamen zur IPAdresse
* DNS: Der Hostname wird durch einen Reverse-DNS-Lookup ermittelt, das
heißt, er erfragt über das Domain Name System den Hostnamen zur IPAdresse.


In der Regel ist die Einstellung On in Ordnung. Der Default-Wert wurde in Version 2.2 jedoch umgestellt, da On manchmal Probleme mit schlecht geschriebenen CGI-Skripten oder Webanwendungen bereitet, die für selbst referenzierte
In der Regel ist die Einstellung On in Ordnung
URLs nicht die Umgebungsvariable SERVER_NAME verwenden. Darüber hinaus
* Der Default-Wert wurde in Version 2.2 jedoch umgestellt, da On manchmal Probleme mit schlecht geschriebenen CGI-Skripten oder Webanwendungen bereitet, die für selbst referenzierte URLs nicht die Umgebungsvariable SERVER_NAME verwenden
kann Off nützlich sein, wenn die Clients im Intranet über einen anderen Hostnamen auf den Server zugreifen als diejenigen im Internet (z.B. www statt
* Darüber hinaus kann Off nützlich sein, wenn die Clients im Intranet über einen anderen Hostnamen auf den Server zugreifen als diejenigen im Internet (z.B
www.mynet.de), da die Intranet-Clients bei Weiterleitungen und ähnlichen Vor
* www statt www.mynet.de), da die Intranet-Clients bei Weiterleitungen und ähnlichen Vor


gängen sonst auf den externen Domain-Namen www.mynet.de umgeleitet würden. DNS sorgt für Kompatibilität mit HTTP/1.0-Clients, die keinen Host-Header
gängen sonst auf den externen Domain-Namen www.mynet.de umgeleitet würden
senden, und sollte eigentlich nur beim Einsatz IP-basierter virtueller Hosts verwendet werden, zumal der Reverse Lookup für Performance-Nachteile sorgt.
* DNS sorgt für Kompatibilität mit HTTP/1.0-Clients, die keinen Host-Header senden, und sollte eigentlich nur beim Einsatz IP-basierter virtueller Hosts verwendet werden, zumal der Reverse Lookup für Performance-Nachteile sorgt


UseCanonicalPhysicalPort
UseCanonicalPhysicalPort Legt fest, woher der Server die Portnummer für selbst referenzierte URLs erhält
Legt fest, woher der Server die Portnummer für selbst referenzierte URLs erhält.


Seit Version 2.2
Seit Version 2.2
Modul core
Modul core Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>
Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>
Syntax UseCanonicalPhysicalPort On|Off Standardwert Off
Syntax UseCanonicalPhysicalPort On|Off
Standardwert Off


Wenn Sie diese Direktive auf On setzen, wird bei der Erzeugung selbst referenzierter URLs der tatsächliche, physische TCP-Port der Anfrage gewürdigt. Die genaue
Wenn Sie diese Direktive auf On setzen, wird bei der Erzeugung selbst referenzierter URLs der tatsächliche, physische TCP-Port der Anfrage gewürdigt
Reihenfolge zur Ermittlung des Ports hängt auch von der Einstellung der Direktive UseCanonicalName ab. Hat diese den Wert On, dann versucht Apache, den Port
* Die genaue Reihenfolge zur Ermittlung des Ports hängt auch von der Einstellung der Direktive UseCanonicalName ab
in folgender Reihenfolge zu bestimmen:
* Hat diese den Wert On, dann versucht Apache, den Port in folgender Reihenfolge zu bestimmen


1. Port aus dem Wert von ServerName
1
2. Physischer Port
* Port aus dem Wert von ServerName
3. Standardport
2
* Physischer Port
3
* Standardport


Hat UseCanonicalName dagegen einen der Werte Off oder DNS, wird folgende Reihenfolge verwendet:
Hat UseCanonicalName dagegen einen der Werte Off oder DNS, wird folgende Reihenfolge verwendet


1. Port aus dem Host-Header
1
2. Physischer Port
* Port aus dem Host-Header
3. Port aus dem Wert von ServerName
2
4. Standardport
* Physischer Port
3
* Port aus dem Wert von ServerName
4
* Standardport


Bei UseCanonicalPhysicalPort Off wird der physische Port nicht berücksichtigt;
Bei UseCanonicalPhysicalPort Off wird der physische Port nicht berücksichtigt;
ansonsten bleibt die Reihenfolge je nach Einstellung für UseCanonicalName
ansonsten bleibt die Reihenfolge je nach Einstellung für UseCanonicalName gleich
gleich.


ServerTokens
ServerTokens Ausführlichkeit der Versionsangabe für den HTTP-Antwort-Header Server
Ausführlichkeit der Versionsangabe für den HTTP-Antwort-Header Server


Modul core
Modul core Kontext Server
Kontext Server


Syntax ServerTokens Major | Minor | Min[imal] | Prod[uctOnly] | OS | Full
Syntax ServerTokens Major | Minor | Min[imal] | Prod[uctOnly] | OS | Full Standardwert Full
Standardwert Full


Diese Direktive legt fest, wie ausführlich der Apache-Webserver seine Versionsinformationen im HTTP-Antwort-Header Server und in der durch ServerSignature
Diese Direktive legt fest, wie ausführlich der Apache-Webserver seine Versionsinformationen im HTTP-Antwort-Header Server und in der durch ServerSignature definierten Fußzeile automatisch generierter Dokumente angibt
definierten Fußzeile automatisch generierter Dokumente angibt. Folgende Werte
* Folgende Werte sind dafür definiert
sind dafür definiert:


* Prod oder ProductOnly: Es wird nur der Programmname ausgegeben: Apache.
* Prod oder ProductOnly: Es wird nur der Programmname ausgegeben: Apache
* Major: Die Hauptversionsnummer wird angegeben, z.B. Apache/2.
* Major: Die Hauptversionsnummer wird angegeben, z.B
* Minor: Haupt- und Unterversionsnummer werden kombiniert, z.B. Apache/2.2.
* Apache/2
* Min oder Minimal. Es werden Hauptversions-, Unterversions- und Releasenummer angegeben. Beispiel: Apache/2.2.10.
* Minor: Haupt- und Unterversionsnummer werden kombiniert, z.B
* OS: Die vollständige Versionsnummer wie bei Minimal wird angegeben, zusätzlich steht in Klammern die Systemplattform. Beispiel:
* Apache/2.2
* Min oder Minimal
* Es werden Hauptversions-, Unterversions- und Releasenummer angegeben
* Beispiel: Apache/2.2.10
* OS: Die vollständige Versionsnummer wie bei Minimal wird angegeben, zusätzlich steht in Klammern die Systemplattform
* Beispiel
Apache/2.2.21 (UNIX)
Apache/2.2.21 (UNIX)


* Full: Zusätzlich zur vollen Versionsnummer und zum Betriebssystem werden
* Full: Zusätzlich zur vollen Versionsnummer und zum Betriebssystem werden die Versionsdaten wichtiger Zusatzmodule angezeigt
die Versionsdaten wichtiger Zusatzmodule angezeigt. Beispiel:
* Beispiel
Apache/2.2.21 (UNIX) mod_perl/2.0.4 Perl/v5.10.0 PHP/5.3.8
Apache/2.2.21 (UNIX) mod_perl/2.0.4 Perl/v5.10.0 PHP/5.3.8


In den meisten Fällen sollten Sie sich für Minimal oder OS entscheiden. Full verrät womöglich zu viele Details über die Server-Konfiguration.
In den meisten Fällen sollten Sie sich für Minimal oder OS entscheiden
* Full verrät womöglich zu viele Details über die Server-Konfiguration


Falls Sie sich allerdings Hoffnungen machen, durch die Veröffentlichung von
Falls Sie sich allerdings Hoffnungen machen, durch die Veröffentlichung von weniger Informationen (im Extremfall ProductOnly) Angriffe auf Ihren Webserver abzuwehren, handelt es sich um einen Fall von »Security by Obscurity«: Durch Verschleierung der Softwareinfrastruktur soll Crackern die Arbeit erschwert werden
weniger Informationen (im Extremfall ProductOnly) Angriffe auf Ihren Webserver
* Dies beeindruckt allerdings höchstens ein paar automatisierte Angriffs-Tools, die von Anfängern verwendet werden
abzuwehren, handelt es sich um einen Fall von »Security by Obscurity«: Durch
Verschleierung der Softwareinfrastruktur soll Crackern die Arbeit erschwert werden. Dies beeindruckt allerdings höchstens ein paar automatisierte Angriffs-Tools, die von Anfängern verwendet werden.


Aus diesem Grund wird auch keine Direktive angeboten, die eine grundlegende
Aus diesem Grund wird auch keine Direktive angeboten, die eine grundlegende Änderung der Server-Informationen ermöglicht
Änderung der Server-Informationen ermöglicht. Wenn Sie möchten, dass Ihr Server sich unter falschem Namen meldet, müssen Sie die entsprechenden Daten
* Wenn Sie möchten, dass Ihr Server sich unter falschem Namen meldet, müssen Sie die entsprechenden Daten vor der Kompilierung im Quellcode ändern
vor der Kompilierung im Quellcode ändern. Die Definitionen befinden sich am
* Die Definitionen befinden sich am Ende der Datei ap_release.h im Verzeichnis include der Source-Distribution und lauten in der aktuellen Version folgendermaßen
Ende der Datei ap_release.h im Verzeichnis include der Source-Distribution
und lauten in der aktuellen Version folgendermaßen:


#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
Zeile 1.024: Zeile 820:
#define AP_SERVER_PATCHLEVEL "9"
#define AP_SERVER_PATCHLEVEL "9"


Die Werte lassen sich natürlich beliebig ändern. Beispiel:
Die Werte lassen sich natürlich beliebig ändern
* Beispiel


#define AP_SERVER_BASEVENDOR "Sirius Cybernetics Corp."
#define AP_SERVER_BASEVENDOR "Sirius Cybernetics Corp."
Zeile 1.032: Zeile 829:
#define AP_SERVER_PATCHLEVEL "42"
#define AP_SERVER_PATCHLEVEL "42"


Wenn Sie Apache anschließend gemäß den Anweisungen aus Kapitel 4, »Apache
Wenn Sie Apache anschließend gemäß den Anweisungen aus Kapitel 4, »Apache kompilieren und installieren«, kompilieren, meldet er sich als The Hitchhiker's Web Server/3.1.42
kompilieren und installieren«, kompilieren, meldet er sich als The Hitchhiker's
Web Server/3.1.42.


ServerSignature
ServerSignature Fußzeile automatisch generierter Server-Dokumente
Fußzeile automatisch generierter Server-Dokumente


Modul core
Modul core Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (All)
Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (All)
Syntax ServerSignature On|Off|Email Standardwert Off
Syntax ServerSignature On|Off|Email
Standardwert Off


Diese Direktive legt fest, ob Apache in automatisch generierte Dokumente wie
Diese Direktive legt fest, ob Apache in automatisch generierte Dokumente wie Index- oder Fehlermeldungsseiten eine Fußzeile einfügen soll, die Informationen über die Server-Software, den Hostnamen und eventuell die E-Mail-Adresse des Administrators enthält
Index- oder Fehlermeldungsseiten eine Fußzeile einfügen soll, die Informationen
* Es gibt drei mögliche Werte
über die Server-Software, den Hostnamen und eventuell die E-Mail-Adresse des
Administrators enthält. Es gibt drei mögliche Werte:


* Off: Apache erzeugt keine Informationsfußzeile.
* Off: Apache erzeugt keine Informationsfußzeile
* On: Es wird eine Fußzeile ohne E-Mail-Adresse generiert. Beispiel:
* On: Es wird eine Fußzeile ohne E-Mail-Adresse generiert
* Beispiel
Apache/2.2.10 (UNIX) Server at www.mynet.de Port 80
Apache/2.2.10 (UNIX) Server at www.mynet.de Port 80
* EMail: Die Fußzeile sieht genauso aus wie bei On, allerdings ist der Hostname
* EMail: Die Fußzeile sieht genauso aus wie bei On, allerdings ist der Hostname gleichzeitig ein Hyperlink auf die unter ServerAdmin angegebene E-MailAdresse
gleichzeitig ein Hyperlink auf die unter ServerAdmin angegebene E-MailAdresse.


Der Hostname wird gemäß der Direktive UseCanonicalName angegeben. Seit Apache 2.0.44 bestimmt ServerTokens, wie ausführlich die Information über den
Der Hostname wird gemäß der Direktive UseCanonicalName angegeben
Server ausfällt.
* Seit Apache 2.0.44 bestimmt ServerTokens, wie ausführlich die Information über den Server ausfällt


DocumentRoot
DocumentRoot Stammverzeichnis der Website
Stammverzeichnis der Website


Modul core
Modul core Kontext Server, <VirtualHost>
Kontext Server, <VirtualHost>


Syntax DocumentRoot Verzeichnis
Syntax DocumentRoot Verzeichnis Standardwert variiert je nach Layout
Standardwert variiert je nach Layout


Dies ist die wichtigste Konfigurationsanweisung für die Website des Hauptservers oder eines virtuellen Hosts: Sie legt das Basisverzeichnis fest, aus dem Apache die angeforderten Dokumente ausliefert. Das bedeutet, dass Pfadangaben aus
Dies ist die wichtigste Konfigurationsanweisung für die Website des Hauptservers oder eines virtuellen Hosts: Sie legt das Basisverzeichnis fest, aus dem Apache die angeforderten Dokumente ausliefert
der URL der Client-Anfrage an dieses Verzeichnis angehängt werden, um die
* Das bedeutet, dass Pfadangaben aus der URL der Client-Anfrage an dieses Verzeichnis angehängt werden, um die gewünschte Ressource zu ermitteln
gewünschte Ressource zu ermitteln. Angenommen, Sie haben DocumentRoot auf
* Angenommen, Sie haben DocumentRoot auf
/usr/local/share/apache2/htdocs gesetzt (Standard beim GNU-Installationslayout;
/usr/local/share/apache2/htdocs gesetzt (Standard beim GNU-Installationslayout;
siehe Kapitel 4, »Apache kompilieren und installieren«). Wenn ein Client nun beispielsweise die URL http://www.mynet.de/info/news.html anfordert, liefert der
siehe Kapitel 4, »Apache kompilieren und installieren«)
Server die Datei /usr/local/share/apache2/htdocs/info/news.html aus – oder eine
* Wenn ein Client nun beispielsweise die URL http://www.mynet.de/info/news.html anfordert, liefert der Server die Datei /usr/local/share/apache2/htdocs/info/news.html aus – oder eine Fehlermeldung, falls das Dokument an der angegebenen Stelle nicht existiert
Fehlermeldung, falls das Dokument an der angegebenen Stelle nicht existiert.
Beispiel
Beispiel:


DocumentRoot /usr/share/web
DocumentRoot /usr/share/web


Mithilfe von Direktiven wie Alias oder UserDir (siehe Kapitel 8, »Weiterleitungen und Indizes«) können Sie übrigens auch solche Dateien und Verzeichnisse im
Mithilfe von Direktiven wie Alias oder UserDir (siehe Kapitel 8, »Weiterleitungen und Indizes«) können Sie übrigens auch solche Dateien und Verzeichnisse im Bereich der Website abbilden, die sich eigentlich außerhalb der DocumentRoot befinden
Bereich der Website abbilden, die sich eigentlich außerhalb der DocumentRoot
befinden.


DirectoryIndex
DirectoryIndex Name der Indexseite
Name der Indexseite


Modul mod_dir
Modul mod_dir Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (Indexes)
Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (Indexes)
Syntax DirectoryIndex lokale_URL [lokale_URL ...]
Syntax DirectoryIndex lokale_URL [lokale_URL ...]
Standardwert index.html
Standardwert index.html


Dies ist eine der beiden Direktiven, die das Standardmodul mod_dir zur Verfügung stellt. Sie definiert die Namen von Dokumenten, die Apache automatisch
Dies ist eine der beiden Direktiven, die das Standardmodul mod_dir zur Verfügung stellt
ausliefert, wenn anstelle einer Datei ein Verzeichnis angefordert wurde. Dies ist
* Sie definiert die Namen von Dokumenten, die Apache automatisch ausliefert, wenn anstelle einer Datei ein Verzeichnis angefordert wurde
erforderlich, damit Benutzer einfach eine Website wie http://www.mynet.de/
* Dies ist erforderlich, damit Benutzer einfach eine Website wie http://www.mynet.de/
anfordern können, anstatt den Namen der gewünschten Datei selbst anzugeben.
anfordern können, anstatt den Namen der gewünschten Datei selbst anzugeben
Wenn Sie hier mehrere Dateien angeben, sucht Apache in der angegebenen Reihenfolge nach ihnen und liefert die erste aus, die er findet. Beispiel:
Wenn Sie hier mehrere Dateien angeben, sucht Apache in der angegebenen Reihenfolge nach ihnen und liefert die erste aus, die er findet
* Beispiel


DirectoryIndex index.html index.html.var index.php
DirectoryIndex index.html index.html.var index.php


Ist eine Datei mit dem Namen index.html vorhanden, dann wird diese an den
Ist eine Datei mit dem Namen index.html vorhanden, dann wird diese an den Client geliefert
Client geliefert. Bei der Angabe index.html.var handelt es sich um eine TypeMap
* Bei der Angabe index.html.var handelt es sich um eine TypeMap


(siehe Kapitel 7, »Header und MIME-Einstellungen«) – je nach Sprach- oder Zeichensatzpräferenz des Clients können auf diese Weise unterschiedliche Dateien
(siehe Kapitel 7, »Header und MIME-Einstellungen«) – je nach Sprach- oder Zeichensatzpräferenz des Clients können auf diese Weise unterschiedliche Dateien serviert werden
serviert werden. Der Eintrag index.php ist interessant, wenn Sie mit PHP (siehe
* Der Eintrag index.php ist interessant, wenn Sie mit PHP (siehe Kapitel 15, »Technologien zur Webprogrammierung«) arbeiten – auf diese Weise können auch PHP-Skripte als Indexdateien dienen
Kapitel 15, »Technologien zur Webprogrammierung«) arbeiten – auf diese Weise
können auch PHP-Skripte als Indexdateien dienen.


Selbstverständlich braucht der Name vor der Dateiendung nicht unbedingt index
Selbstverständlich braucht der Name vor der Dateiendung nicht unbedingt index zu lauten – wenn Sie z.B
zu lauten – wenn Sie z.B. von Microsoft Internet Information Services auf Apache
* von Microsoft Internet Information Services auf Apache umgestiegen sind, möchten Sie vielleicht lieber den bei Microsoft üblichen Dateinamen default.html weiterverwenden, um Ihre alte Website mit möglichst wenigen Änderungen zu übernehmen
umgestiegen sind, möchten Sie vielleicht lieber den bei Microsoft üblichen Dateinamen default.html weiterverwenden, um Ihre alte Website mit möglichst
wenigen Änderungen zu übernehmen.


Übrigens können Sie in der Liste auch einen absoluten URL-Pfad angeben. Dieser
Übrigens können Sie in der Liste auch einen absoluten URL-Pfad angeben
sollte natürlich den letzten Eintrag bilden, damit die entsprechende Datei immer
* Dieser sollte natürlich den letzten Eintrag bilden, damit die entsprechende Datei immer dann ausgeliefert wird, wenn das aktuelle Verzeichnis keine eigene Indexdatei enthält
dann ausgeliefert wird, wenn das aktuelle Verzeichnis keine eigene Indexdatei
* Das folgende Beispiel weist Apache an, die Datei index.html im angeforderten Verzeichnis an die Clients zu liefern oder aber die Datei defaultindex.html in der DocumentRoot, falls index.html nicht existiert
enthält. Das folgende Beispiel weist Apache an, die Datei index.html im angeforderten Verzeichnis an die Clients zu liefern oder aber die Datei defaultindex.html
in der DocumentRoot, falls index.html nicht existiert:


DirectoryIndex index.html /defaultindex.html
DirectoryIndex index.html /defaultindex.html


Auf Wunsch kann Apache auch automatisch einen Verzeichnisindex generieren –
Auf Wunsch kann Apache auch automatisch einen Verzeichnisindex generieren –
diese Funktion wird vom Modul mod_autoindex bereitgestellt, das in Kapitel 8, »Weiterleitungen und Indizes«, ausführlich beschrieben wird.
diese Funktion wird vom Modul mod_autoindex bereitgestellt, das in Kapitel 8, »Weiterleitungen und Indizes«, ausführlich beschrieben wird


mod_dir und Verzeichnisanfragen
mod_dir und Verzeichnisanfragen
* Neben der Definition der Indexseite hat das Modul mod_dir übrigens auch noch die
* Neben der Definition der Indexseite hat das Modul mod_dir übrigens auch noch die wichtige Aufgabe, Anfragen umzuleiten, die ein Verzeichnis betreffen
wichtige Aufgabe, Anfragen umzuleiten, die ein Verzeichnis betreffen.
* Wenn eine Anfrage mit einer URL ohne abschließenden Slash eintrifft, behandelt Apache diese normalerweise nicht als Anforderung eines Verzeichnisses
* Wenn eine Anfrage mit einer URL ohne abschließenden Slash eintrifft, behandelt
* Angenommen, ein Client fordert die Ressource /test an
Apache diese normalerweise nicht als Anforderung eines Verzeichnisses. Angenommen, ein Client fordert die Ressource /test an. Der Server sucht daraufhin in der
* Der Server sucht daraufhin in der DocumentRoot nach einer Datei mit diesem Namen
DocumentRoot nach einer Datei mit diesem Namen.
* Falls aber keine Datei, sondern nur ein Verzeichnis mit diesem Namen vorhanden ist, geht es unterschiedlich weiter: Wenn mod_dir nicht aktiv ist, erhält der Client einfach die Fehlermeldung »404 Not Found«
* Falls aber keine Datei, sondern nur ein Verzeichnis mit diesem Namen vorhanden
* Ist mod_dir dagegen geladen, wird eine Weiterleitung (301 Moved Permanently) gesendet, die einen Location-Header mit der kompletten URL einschließlich des Slashs enthält, in diesem Fall also z.B
ist, geht es unterschiedlich weiter: Wenn mod_dir nicht aktiv ist, erhält der Client
http:// www.mynet.de/test/ (der Hostname wird gemäß der bereits beschriebenen Direktive UseCanonicalName gebildet)
einfach die Fehlermeldung »404 Not Found«. Ist mod_dir dagegen geladen, wird
* So gut wie alle Browser folgen dieser Weiterleitung automatisch
eine Weiterleitung (301 Moved Permanently) gesendet, die einen Location-Header
mit der kompletten URL einschließlich des Slashs enthält, in diesem Fall also z.B.
http:// www.mynet.de/test/ (der Hostname wird gemäß der bereits beschriebenen
Direktive UseCanonicalName gebildet). So gut wie alle Browser folgen dieser Weiterleitung automatisch.
Wenn ein Client ein Verzeichnis mit abschließendem Slash anfordert, beispielsweise
Wenn ein Client ein Verzeichnis mit abschließendem Slash anfordert, beispielsweise
/test/, wird natürlich sofort dessen Index geliefert.
/test/, wird natürlich sofort dessen Index geliefert


DirectorySlash
DirectorySlash Weiterleitung bei fehlendem Abschluss-Slash ein-/ausschalten
Weiterleitung bei fehlendem Abschluss-Slash ein-/ausschalten


Seit Version 2.0.51
Seit Version 2.0.51
Modul mod_dir
Modul mod_dir Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (Indexes)
Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (Indexes)
Syntax DirectorySlash On|Off Standardwert On
Syntax DirectorySlash On|Off
Standardwert On


Diese Direktive erlaubt es Ihnen in Ausnahmefällen, die unter »mod_dir und Verzeichnisanfragen« soeben beschriebene Weiterleitung bei fehlendem Slash zu
Diese Direktive erlaubt es Ihnen in Ausnahmefällen, die unter »mod_dir und Verzeichnisanfragen« soeben beschriebene Weiterleitung bei fehlendem Slash zu deaktivieren
deaktivieren. Dazu müssen Sie im entsprechenden Kontext folgende Direktive
* Dazu müssen Sie im entsprechenden Kontext folgende Direktive setzen
setzen:


DirectorySlash Off
DirectorySlash Off


Da die URL ohne abschließenden Slash nun nicht mehr auf Inhalte verweist, könnte es sinnvoll sein, für diesen Kontext einen speziellen Handler zu setzen, der sich um die Beantwortung solcher Anfragen kümmert (siehe Kapitel 7, »Header und MIME-Einstellungen«).
Da die URL ohne abschließenden Slash nun nicht mehr auf Inhalte verweist, könnte es sinnvoll sein, für diesen Kontext einen speziellen Handler zu setzen, der sich um die Beantwortung solcher Anfragen kümmert (siehe Kapitel 7, »Header und MIME-Einstellungen«)


AccessFileName
AccessFileName Name der ausgelagerten Verzeichniskonfigurationsdatei
Name der ausgelagerten Verzeichniskonfigurationsdatei


Modul core
Modul core Kontext Server, <VirtualHost>
Kontext Server, <VirtualHost>
Syntax AccessFileName Dateiname Standardwert .htaccess
Syntax AccessFileName Dateiname
Standardwert .htaccess


Mithilfe dieser Direktive können Sie den Namen einer Datei angeben, die innerhalb eines Verzeichnisses der DocumentRoot zum Überschreiben von Konfigurationsdirektiven dient. Standardmäßig ist der Name dieser Datei .htaccess, und es
Mithilfe dieser Direktive können Sie den Namen einer Datei angeben, die innerhalb eines Verzeichnisses der DocumentRoot zum Überschreiben von Konfigurationsdirektiven dient
gibt im Allgemeinen keinen Grund, dies zu ändern.3 Erlaubt ist jeder beliebige
* Standardmäßig ist der Name dieser Datei .htaccess, und es gibt im Allgemeinen keinen Grund, dies zu ändern.3 Erlaubt ist jeder beliebige Dateiname – er sollte aber zumindest mit einem Punkt beginnen, um wenigstens einen geringfügigen Schutz zu gewährleisten
Dateiname – er sollte aber zumindest mit einem Punkt beginnen, um wenigstens
* Beispiel
einen geringfügigen Schutz zu gewährleisten. Beispiel:


AccessFileName .override
AccessFileName .override


3 Wieder einmal ein Fall von »Security by Obscurity«, der allenfalls vor Skript-Kiddies
3 Wieder einmal ein Fall von »Security by Obscurity«, der allenfalls vor Skript-Kiddies schützt
schützt.


Vergessen Sie nicht, die Auslieferung von Dateien mit dem gewählten Namen an
Vergessen Sie nicht, die Auslieferung von Dateien mit dem gewählten Namen an Clients generell zu deaktivieren
Clients generell zu deaktivieren:


<Files .override>
<Files .override>
Order Deny,Allow
Order Deny,Allow Deny from all
Deny from all
</Files>
</Files>


== Verzeichniseinstellungen ==
== Verzeichniseinstellungen ==
; Wichtige Verzeichniseinstellungen
; Wichtige Verzeichniseinstellungen Auch die Konfigurationsanweisungen, die in diesem Abschnitt besprochen werden, gehören zur zweiten Abteilung der Datei httpd.conf
Auch die Konfigurationsanweisungen, die in diesem Abschnitt besprochen werden, gehören zur zweiten Abteilung der Datei httpd.conf. Der Unterschied besteht darin, dass sie üblicherweise innerhalb von <Directory>-Containern stehen, um die Einstellungen für die DocumentRoot und ihre Unterverzeichnisse sowie für einige andere Verzeichnisse festzulegen.
* Der Unterschied besteht darin, dass sie üblicherweise innerhalb von <Directory>-Containern stehen, um die Einstellungen für die DocumentRoot und ihre Unterverzeichnisse sowie für einige andere Verzeichnisse festzulegen


Hier werden zunächst alle entsprechenden Direktiven behandelt; im Anschluss daran finden Sie einige Beispiele für übliche Verzeichniskonfigurationen.
Hier werden zunächst alle entsprechenden Direktiven behandelt; im Anschluss daran finden Sie einige Beispiele für übliche Verzeichniskonfigurationen


  Options
  Options Verzeichnisoptionen
Verzeichnisoptionen


  Modul core
  Modul core
Zeile 1.195: Zeile 956:
  Standardwert All
  Standardwert All


Die Direktive Options legt fest, welche besonderen Eigenschaften ein bestimmtes Verzeichnis (mitsamt seinen Unterverzeichnissen) besitzen soll. Das nähere Verhalten einiger dieser Optionen wird durch andere Direktiven geregelt; hier geht es zunächst einmal darum, ob eine bestimmte Eigenschaft grundsätzlich unterstützt werden soll oder nicht. Im Einzelnen sind folgende Optionen definiert, die Sie als Werte der Direktive angeben können:
Die Direktive Options legt fest, welche besonderen Eigenschaften ein bestimmtes Verzeichnis (mitsamt seinen Unterverzeichnissen) besitzen soll
* Das nähere Verhalten einiger dieser Optionen wird durch andere Direktiven geregelt; hier geht es zunächst einmal darum, ob eine bestimmte Eigenschaft grundsätzlich unterstützt werden soll oder nicht
* Im Einzelnen sind folgende Optionen definiert, die Sie als Werte der Direktive angeben können


* None: Schaltet sämtliche Optionen ab.
* None: Schaltet sämtliche Optionen ab
* Indexes: Wenn die angeforderte URL ein Verzeichnis ist, wird die mittels
* Indexes: Wenn die angeforderte URL ein Verzeichnis ist, wird die mittels DirectoryIndex festgelegte Indexdatei ausgeliefert oder – falls diese nicht vorhanden ist – ein durch mod_autoindex generierter Index
DirectoryIndex festgelegte Indexdatei ausgeliefert oder – falls diese nicht vorhanden ist – ein durch mod_autoindex generierter Index.
* FollowSymLinks: Symbolische Links innerhalb des Verzeichnisses werden aufgelöst – Apache liefert das entsprechende Ziel des Links aus
* FollowSymLinks: Symbolische Links innerhalb des Verzeichnisses werden aufgelöst – Apache liefert das entsprechende Ziel des Links aus.


* SymLinksIfOwnerMatch: Symbolische Links werden nur dann verfolgt, wenn
* SymLinksIfOwnerMatch: Symbolische Links werden nur dann verfolgt, wenn der Eigentümer des SymLinks demjenigen der Zieldatei entspricht
der Eigentümer des SymLinks demjenigen der Zieldatei entspricht.
* ExecCGI: Innerhalb des Verzeichnisses soll die Ausführung von CGI-Skripten gestattet sein: Dateien mit bestimmten Endungen oder MIME-Types werden von Apache als ausführbare Skripte betrachtet; ihre Ausgabe wird als dynamisch erzeugtes Dokument an den Client ausgeliefert
* ExecCGI: Innerhalb des Verzeichnisses soll die Ausführung von CGI-Skripten
* Es ist erheblich sicherer, über die Direktive ScriptAlias separate CGI-Verzeichnisse einzurichten und diese Option für Verzeichnisse innerhalb der DocumentRoot zu deaktivieren
gestattet sein: Dateien mit bestimmten Endungen oder MIME-Types werden
* Näheres zur CGI-Konfiguration erfahren Sie in Kapitel 14, »CGI«
von Apache als ausführbare Skripte betrachtet; ihre Ausgabe wird als dynamisch erzeugtes Dokument an den Client ausgeliefert. Es ist erheblich sicherer, über die Direktive ScriptAlias separate CGI-Verzeichnisse einzurichten
* Includes: Server Side Includes (siehe Kapitel 16, »SSI und Filter«) sind in diesem Verzeichnis gestattet
und diese Option für Verzeichnisse innerhalb der DocumentRoot zu deaktivieren. Näheres zur CGI-Konfiguration erfahren Sie in Kapitel 14, »CGI«.
* Includes: Server Side Includes (siehe Kapitel 16, »SSI und Filter«) sind in diesem Verzeichnis gestattet.
* IncludesNOEXEC: Auch in einem Verzeichnis mit dieser Option sind SSI grundsätzlich erlaubt, allerdings mit Ausnahme von #exec (Programmausführung)
* IncludesNOEXEC: Auch in einem Verzeichnis mit dieser Option sind SSI grundsätzlich erlaubt, allerdings mit Ausnahme von #exec (Programmausführung)
und #exec cgi (CGI-Ausführung).
und #exec cgi (CGI-Ausführung)
* MultiViews: Aktiviert die Auslieferung alternativer Dokumente für unterschiedliche Sprach-, Zeichensatz- oder Dateityp-Präferenzen eines Clients
* MultiViews: Aktiviert die Auslieferung alternativer Dokumente für unterschiedliche Sprach-, Zeichensatz- oder Dateityp-Präferenzen eines Clients durch mod_negotiation
durch mod_negotiation. Näheres dazu finden Sie in Kapitel 7, »Header und
* Näheres dazu finden Sie in Kapitel 7, »Header und MIME-Einstellungen«
MIME-Einstellungen«.
* All: Alle genannten Optionen außer MultiViews
* All: Alle genannten Optionen außer MultiViews. Wenn Options für ein Verzeichnis nicht angegeben wird, ist dies der Standardwert.
* Wenn Options für ein Verzeichnis nicht angegeben wird, ist dies der Standardwert


Wenn Sie Optionen für mehrere ineinander verschachtelte Verzeichnisse festlegen, gelten für ein gegebenes Verzeichnis jeweils die speziellsten (für das am weitesten untergeordnete Verzeichnis angegebenen) Werte. Näheres zur Reihenfolge
Wenn Sie Optionen für mehrere ineinander verschachtelte Verzeichnisse festlegen, gelten für ein gegebenes Verzeichnis jeweils die speziellsten (für das am weitesten untergeordnete Verzeichnis angegebenen) Werte
der Abarbeitung unterschiedlicher Container erfahren Sie in Abschnitt 6.2, »Kontexte und Container«. Das folgende Beispiel illustriert ein Missverständnis, das in
* Näheres zur Reihenfolge der Abarbeitung unterschiedlicher Container erfahren Sie in Abschnitt 6.2, »Kontexte und Container«
diesem Zusammenhang auftreten kann:
* Das folgende Beispiel illustriert ein Missverständnis, das in diesem Zusammenhang auftreten kann


<Directory /usr/share/web>
<Directory /usr/share/web>
Options FollowSymLinks Indexes IncludesNOEXEC
Options FollowSymLinks Indexes IncludesNOEXEC
# ... weitere Einstellungen für /usr/share/web
# ..
* weitere Einstellungen für /usr/share/web
</Directory>
</Directory>


<Directory /usr/share/web/test>
<Directory /usr/share/web/test>
Options Includes
Options Includes
# ... weitere Einstellungen für /usr/share/web/test
# ..
* weitere Einstellungen für /usr/share/web/test
</Directory>
</Directory>


Im Verzeichnis /usr/share/web sind die Optionen FollowSymLinks, Indexes und
Im Verzeichnis /usr/share/web sind die Optionen FollowSymLinks, Indexes und IncludesNOEXEC aktiviert
IncludesNOEXEC aktiviert. Im Unterverzeichnis /usr/share/web/test gilt dagegen
* Im Unterverzeichnis /usr/share/web/test gilt dagegen nur die Option Includes – das ist wahrscheinlich nicht das gewünschte Verhal
nur die Option Includes – das ist wahrscheinlich nicht das gewünschte Verhal


ten. Um Includes hinzuzufügen, anstatt die anderen Optionen durch Includes zu
ten
ersetzen, müssten Sie für /usr/share/web/test diese Variante angeben:
* Um Includes hinzuzufügen, anstatt die anderen Optionen durch Includes zu ersetzen, müssten Sie für /usr/share/web/test diese Variante angeben


<Directory /usr/share/web/test>
<Directory /usr/share/web/test>
Options FollowSymLinks Indexes Includes
Options FollowSymLinks Indexes Includes
# ... weitere Einstellungen für /usr/share/web/test
# ..
* weitere Einstellungen für /usr/share/web/test
</Directory>
</Directory>


Natürlich können Sie die im übergeordneten Verzeichnis gesetzte Option
Natürlich können Sie die im übergeordneten Verzeichnis gesetzte Option IncludesNOEXEC hier zufälligerweise weglassen, da Includes deren Fähigkeiten enthält (und ausweitet)
IncludesNOEXEC hier zufälligerweise weglassen, da Includes deren Fähigkeiten
enthält (und ausweitet).


Speziell für untergeordnete Verzeichnisse wird die spezielle Schreibweise
Speziell für untergeordnete Verzeichnisse wird die spezielle Schreibweise
+Option beziehungsweise -Option definiert: Damit lässt sich eine einzelne
+Option beziehungsweise -Option definiert: Damit lässt sich eine einzelne Option zu den bereits im übergeordneten Kontext gesetzten Optionen hinzufügen beziehungsweise hiervon entfernen
Option zu den bereits im übergeordneten Kontext gesetzten Optionen hinzufügen beziehungsweise hiervon entfernen. Mithilfe dieser Möglichkeit lässt sich
* Mithilfe dieser Möglichkeit lässt sich das gerade zitierte Beispiel einfacher schreiben
das gerade zitierte Beispiel einfacher schreiben:


<Directory /usr/share/web>
<Directory /usr/share/web>
Options FollowSymLinks Indexes IncludesNOEXEC
Options FollowSymLinks Indexes IncludesNOEXEC
# ... weitere Einstellungen für /usr/share/web
# ..
* weitere Einstellungen für /usr/share/web
</Directory>
</Directory>


<Directory /usr/share/web/test>
<Directory /usr/share/web/test>
Options +Includes
Options +Includes
# ... weitere Einstellungen für /usr/share/web/test
# ..
* weitere Einstellungen für /usr/share/web/test
</Directory>
</Directory>


AllowOverride
AllowOverride Festlegung der lokal überschreibbaren Konfigurationsdirektiven
Festlegung der lokal überschreibbaren Konfigurationsdirektiven


Modul core
Modul core Kontext <Directory>
Kontext <Directory>
Syntax AllowOverride All|None|Direktiventyp [Direktiventyp ...]
Syntax AllowOverride All|None|Direktiventyp [Direktiventyp ...]
Standardwert All
Standardwert All


Diese Direktive legt fest, welche Arten von Konfigurationsdirektiven in .htaccessDateien überschrieben werden dürfen. Da diese Dateien nur in Verzeichnissen
Diese Direktive legt fest, welche Arten von Konfigurationsdirektiven in .htaccessDateien überschrieben werden dürfen
innerhalb der DocumentRoot erlaubt sind, ist auch AllowOverride nur in
* Da diese Dateien nur in Verzeichnissen innerhalb der DocumentRoot erlaubt sind, ist auch AllowOverride nur in
<Directory>-Abschnitten gültig.
<Directory>-Abschnitten gültig


Es ist nicht möglich, die in .htaccess-Dateien gestatteten Direktiven einzeln anzugeben. Stattdessen definiert AllowOverride zahlreiche Gruppenbezeichnungen, die jeweils Konfigurationsanweisungen mit bestimmten Aufgaben zusammenfas
Es ist nicht möglich, die in .htaccess-Dateien gestatteten Direktiven einzeln anzugeben
* Stattdessen definiert AllowOverride zahlreiche Gruppenbezeichnungen, die jeweils Konfigurationsanweisungen mit bestimmten Aufgaben zusammenfas


sen. Damit Sie genau wissen, welche das jeweils sind, finden Sie in diesem Buch
sen
bei der Übersicht jeder einzelnen Direktive, die den Kontext .htaccess besitzt, in
* Damit Sie genau wissen, welche das jeweils sind, finden Sie in diesem Buch bei der Übersicht jeder einzelnen Direktive, die den Kontext .htaccess besitzt, in Klammern den Wert, den AllowOverride beinhalten muss, um diese Direktive in einer .htaccess-Datei zuzulassen
Klammern den Wert, den AllowOverride beinhalten muss, um diese Direktive in
einer .htaccess-Datei zuzulassen.


Hier die einzelnen Werte, die Sie mit Ausnahme von All und None beliebig
Hier die einzelnen Werte, die Sie mit Ausnahme von All und None beliebig mischen können
mischen können:


* None: Im angegebenen Verzeichnis und in allen Unterverzeichnissen ohne
* None: Im angegebenen Verzeichnis und in allen Unterverzeichnissen ohne anderweitige Einstellung akzeptiert Apache gar keine .htaccess-Dateien
anderweitige Einstellung akzeptiert Apache gar keine .htaccess-Dateien.
* FileInfo: Ermöglicht das Überschreiben der Direktiven, die sich um Dateitypen und -inhalte kümmern
* FileInfo: Ermöglicht das Überschreiben der Direktiven, die sich um Dateitypen und -inhalte kümmern.
* Indexes: Gestattet das Überschreiben von Direktiven zur automatischen Erzeugung von Verzeichnisindizes (meist in mod_autoindex definiert)
* Indexes: Gestattet das Überschreiben von Direktiven zur automatischen
* Limit: Diese Option erlaubt das Überschreiben der Direktiven Order, Allow und Deny zur hostbasierten Zugriffskontrolle
Erzeugung von Verzeichnisindizes (meist in mod_autoindex definiert).
* AuthConfig: Wenn dieser Wert angegeben wird, dürfen alle Direktiven zur Authentifizierung überschrieben werden (siehe Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)
* Limit: Diese Option erlaubt das Überschreiben der Direktiven Order, Allow
* Options: Ermöglicht das Überschreiben der bereits besprochenen Direktive Options und anderer Verzeichnisoptions-Direktiven
und Deny zur hostbasierten Zugriffskontrolle.
* AuthConfig: Wenn dieser Wert angegeben wird, dürfen alle Direktiven zur
Authentifizierung überschrieben werden (siehe Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«).
* Options: Ermöglicht das Überschreiben der bereits besprochenen Direktive
Options und anderer Verzeichnisoptions-Direktiven.


* All: Diese Einstellung gestattet die Verwendung aller bereits genannten Einzelgruppen sowie einiger zusätzlicher Direktiven.
* All: Diese Einstellung gestattet die Verwendung aller bereits genannten Einzelgruppen sowie einiger zusätzlicher Direktiven


Hier ein Beispiel:
Hier ein Beispiel


<Directory /usr/local/share/apache2/htdocs>
<Directory /usr/local/share/apache2/htdocs>
AllowOverride FileInfo Limit AuthConfig
AllowOverride FileInfo Limit AuthConfig
# ... weitere Einstellungen für die DocumentRoot
# ..
* weitere Einstellungen für die DocumentRoot
</Directory>
</Directory>


Näheres zu .htaccess-Dateien finden Sie in Abschnitt 6.2, »Kontexte und Container«.
Näheres zu .htaccess-Dateien finden Sie in Abschnitt 6.2, »Kontexte und Container«


Order
Order Reihenfolge, in der Allow- und Deny-Direktiven beachtet werden
Reihenfolge, in der Allow- und Deny-Direktiven beachtet werden


Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access
Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access Kontext <Directory>, <Location>, <Files>, .htaccess (Limit)
Kontext <Directory>, <Location>, <Files>, .htaccess (Limit)
Syntax Order Deny,Allow | Allow,Deny | Mutual-failure Standardwert Deny,Allow
Syntax Order Deny,Allow | Allow,Deny | Mutual-failure
Standardwert Deny,Allow


Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, besprochene Direktive Require ersetzt. Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul mod_access_compat unterstützt, dürfte aber
Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, besprochene Direktive Require ersetzt
mittelfristig ganz abgeschafft werden.
* Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul mod_access_compat unterstützt, dürfte aber mittelfristig ganz abgeschafft werden


Bis Version 2.2 ist diese Direktive allerdings äußerst wichtig. Order legt die Reihenfolge fest, in der die Regeln aus den Konfigurationsanweisungen Allow und
Bis Version 2.2 ist diese Direktive allerdings äußerst wichtig
Deny angewendet werden, die wiederum bestimmen, welche Hosts auf die entsprechende Ressource zugreifen dürfen.
* Order legt die Reihenfolge fest, in der die Regeln aus den Konfigurationsanweisungen Allow und Deny angewendet werden, die wiederum bestimmen, welche Hosts auf die entsprechende Ressource zugreifen dürfen


* Deny,Allow: Diese Reihenfolge ist die Voreinstellung. Sie besagt, dass zuerst
* Deny,Allow: Diese Reihenfolge ist die Voreinstellung
die Deny-Liste und dann die Allow-Liste ausgewertet werden. Das bedeutet in
* Sie besagt, dass zuerst die Deny-Liste und dann die Allow-Liste ausgewertet werden
der Praxis, dass die Regeln nach folgendem Schema ausgewertet werden: »Der
* Das bedeutet in der Praxis, dass die Regeln nach folgendem Schema ausgewertet werden: »Der Zugriff ist den angegebenen Hosts verboten mit den folgenden Ausnahmen
Zugriff ist den angegebenen Hosts verboten mit den folgenden Ausnahmen:
…« Die sinnvolle Verwendung setzt natürlich voraus, dass für Deny eine allgemeinere Angabe gemacht wird (vorzugsweise Deny from all) als für Allow
…« Die sinnvolle Verwendung setzt natürlich voraus, dass für Deny eine allgemeinere Angabe gemacht wird (vorzugsweise Deny from all) als für Allow.
Wenn Sie keine weiteren Direktiven verwenden, ist der Standard bei dieser Einstellung Allow from all – alle Hosts dürfen zugreifen
Wenn Sie keine weiteren Direktiven verwenden, ist der Standard bei dieser
* Allow,Deny: Dies ist die umgekehrte Reihenfolge, die dafür sorgt, dass die Allow-Liste vor der Deny-Liste ausgewertet wird
Einstellung Allow from all – alle Hosts dürfen zugreifen.
* Mit anderen Worten: Der Zugriff wird zunächst den angegebenen (üblicherweise allen) Hosts gestattet, bevor er einer kleineren Anzahl verboten wird
* Allow,Deny: Dies ist die umgekehrte Reihenfolge, die dafür sorgt, dass die
* Das Standardverhalten ist in diesem Fall Deny from all, das heißt, alle müssen zunächst draußen bleiben
Allow-Liste vor der Deny-Liste ausgewertet wird. Mit anderen Worten: Der
Zugriff wird zunächst den angegebenen (üblicherweise allen) Hosts gestattet, bevor er einer kleineren Anzahl verboten wird. Das Standardverhalten ist in
diesem Fall Deny from all, das heißt, alle müssen zunächst draußen bleiben.
* Mutual-failure: veraltetes Synonym für Allow,Deny
* Mutual-failure: veraltetes Synonym für Allow,Deny


Bitte beachten Sie, dass zwischen den Aufzählungen Deny,Allow und Allow,Deny
Bitte beachten Sie, dass zwischen den Aufzählungen Deny,Allow und Allow,Deny kein Leerzeichen nach dem Komma stehen darf
kein Leerzeichen nach dem Komma stehen darf.


Allow
Allow Bestimmt, welche Hosts auf einen Site-Bereich zugreifen dürfen
Bestimmt, welche Hosts auf einen Site-Bereich zugreifen dürfen.


Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access
Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access Kontext <Directory>, <Location>, <Files>, .htaccess (Limit)
Kontext <Directory>, <Location>, <Files>, .htaccess (Limit)
Syntax Allow from all | Host | env=Umgebungsvariable [Host |
Syntax Allow from all | Host | env=Umgebungsvariable [Host |
env=Umgebungsvariable ...]
env=Umgebungsvariable ...]
Standardwert nicht gesetzt
Standardwert nicht gesetzt


Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, ersetzt. Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul
Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, ersetzt
mod_access_compat unterstützt, dürfte aber mittelfristig ganz abgeschafft werden.
* Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul mod_access_compat unterstützt, dürfte aber mittelfristig ganz abgeschafft werden


Bis Apache 2.2 legt die Direktive Allow fest, wer auf eine bestimmte Ressource
Bis Apache 2.2 legt die Direktive Allow fest, wer auf eine bestimmte Ressource des Servers zugreifen darf
des Servers zugreifen darf. Die Werte können eines der folgenden Formate
* Die Werte können eines der folgenden Formate annehmen
annehmen:


* All
* All Grundsätzlich darf jeder Host auf die Inhalte des Kontextes zugreifen, in dem die Direktive definiert ist
Grundsätzlich darf jeder Host auf die Inhalte des Kontextes zugreifen, in dem
* Die entsprechende Apache-2.4-Schreibweise lautet
die Direktive definiert ist. Die entsprechende Apache-2.4-Schreibweise lautet:


Require all granted
Require all granted


* Domain-Name
* Domain-Name Bezeichnet Hosts, deren Name der angegebenen Domain und ihren Subdomains entspricht
Bezeichnet Hosts, deren Name der angegebenen Domain und ihren Subdomains entspricht. Apache führt zur Ermittlung des Hostnamens eines zugreifenden Rechners zunächst einen Reverse-DNS-Lookup durch, um den zur IPAdresse gehörenden Hostnamen zu ermitteln. Anschließend wird zur Sicherheit noch einmal ein Forward-Lookup ausgeführt, um sicherzugehen, dass der
* Apache führt zur Ermittlung des Hostnamens eines zugreifenden Rechners zunächst einen Reverse-DNS-Lookup durch, um den zur IPAdresse gehörenden Hostnamen zu ermitteln
Hostname wiederum der IP-Adresse entspricht. Die DNS-Lookups finden in
* Anschließend wird zur Sicherheit noch einmal ein Forward-Lookup ausgeführt, um sicherzugehen, dass der Hostname wiederum der IP-Adresse entspricht
diesem Fall auch dann statt, wenn HostNameLookups (siehe Kapitel 11, »Logging«) deaktiviert ist.
* Die DNS-Lookups finden in diesem Fall auch dann statt, wenn HostNameLookups (siehe Kapitel 11, »Logging«) deaktiviert ist
Betrachten Sie das folgende Beispiel:
Betrachten Sie das folgende Beispiel


Allow from office.mynet.de
Allow from office.mynet.de


Client-Rechner aus den Subdomains office.mynet.de und billing.office.mynet.de
Client-Rechner aus den Subdomains office.mynet.de und billing.office.mynet.de dürfen zugreifen, während Clients aus der Domain sales.mynet.de der Zugriff verweigert wird
dürfen zugreifen, während Clients aus der Domain sales.mynet.de der Zugriff
Die 2.4-Variante ist
verweigert wird.
Die 2.4-Variante ist:


Require host office.mynet.de
Require host office.mynet.de


* Vollständige IP-Adresse
* Vollständige IP-Adresse Ein solcher Wert gibt die IP-Adresse eines einzelnen Hosts an, der auf den Server zugreifen darf
Ein solcher Wert gibt die IP-Adresse eines einzelnen Hosts an, der auf den Server zugreifen darf. Beispiel:
* Beispiel


Allow from 196.17.8.3
Allow from 196.17.8.3


Schreiben Sie für Apache 2.4 stattdessen:
Schreiben Sie für Apache 2.4 stattdessen


Require ip 196.17.8.3
Require ip 196.17.8.3


Wenn Sie in einem Bereich Ihrer Website (oder auf dem ganzen Server) zu
Wenn Sie in einem Bereich Ihrer Website (oder auf dem ganzen Server) zu Testzwecken nur Zugriffe durch den lokalen Rechner selbst gestatten möchten, müssen Sie im entsprechenden Kontext folgende Direktivenfolge verwenden
Testzwecken nur Zugriffe durch den lokalen Rechner selbst gestatten möchten, müssen Sie im entsprechenden Kontext folgende Direktivenfolge verwenden:


Order Deny,Allow
Order Deny,Allow Deny from all Allow from 127.0.0.1
Deny from all
Allow from 127.0.0.1


In 2.4 funktioniert es folgendermaßen:
In 2.4 funktioniert es folgendermaßen


Require ip 127.0.0.1
Require ip 127.0.0.1


* Unvollständige IP-Adresse
* Unvollständige IP-Adresse Wenn Sie Zugriffe auf ein bestimmtes IP-Teilnetz beschränken möchten, genügt es oft, den gemeinsamen Netzwerkteil der entsprechenden IP-Adressen anzugeben
Wenn Sie Zugriffe auf ein bestimmtes IP-Teilnetz beschränken möchten, genügt
* Das folgende Beispiel erlaubt Zugriffe aus dem Netz 196.17.8.0/24
es oft, den gemeinsamen Netzwerkteil der entsprechenden IP-Adressen anzugeben. Das folgende Beispiel erlaubt Zugriffe aus dem Netz 196.17.8.0/24:


Allow from 196.17.8
Allow from 196.17.8


Apache 2.4:
Apache 2.4


Require ip 196.17.8
Require ip 196.17.8


* CIDR-Adresse
* CIDR-Adresse Sie können ein Teilnetz auch nach der CIDR-Logik angeben (siehe Kapitel 1, »TCP/IP-Netzwerke, Internet und WWW«)
Sie können ein Teilnetz auch nach der CIDR-Logik angeben (siehe Kapitel 1, »TCP/IP-Netzwerke, Internet und WWW«). Wenn die Grenze zwischen Netzwerk- und Hostteil im gewünschten IP-Teilnetz nicht genau an einer ByteGrenze liegt, ist dies sogar erforderlich. Dieses Beispiel gestattet Zugriffe aus
* Wenn die Grenze zwischen Netzwerk- und Hostteil im gewünschten IP-Teilnetz nicht genau an einer ByteGrenze liegt, ist dies sogar erforderlich
dem Teilnetz 160.76.32.0/19 (Adressbereich 160.76.32.0 bis 160.76.63.255):
* Dieses Beispiel gestattet Zugriffe aus dem Teilnetz 160.76.32.0/19 (Adressbereich 160.76.32.0 bis 160.76.63.255)


Allow from 160.76.32.0/19
Allow from 160.76.32.0/19


Version 2.4:
Version 2.4


Require ip 160.76.32.0/19
Require ip 160.76.32.0/19


* IP-Adresse/Teilnetzmaske
* IP-Adresse/Teilnetzmaske Dies ist eine alternative Schreibweise für CIDR-Adressen
Dies ist eine alternative Schreibweise für CIDR-Adressen. Beispielsweise können Sie das Netzwerk 160.76.32.0/19 auch folgendermaßen angeben:
* Beispielsweise können Sie das Netzwerk 160.76.32.0/19 auch folgendermaßen angeben


Allow from 160.76.32.0/255.255.224.0
Allow from 160.76.32.0/255.255.224.0


Ab 2.3-beta:
Ab 2.3-beta


Require ip 160.76.32.0/255.255.224.0
Require ip 160.76.32.0/255.255.224.0


* env=Umgebungsvariable
* env=Umgebungsvariable Diese spezielle Form erlaubt Zugriffe nur dann, wenn die angegebene Umgebungsvariable gesetzt ist
Diese spezielle Form erlaubt Zugriffe nur dann, wenn die angegebene Umgebungsvariable gesetzt ist. Sinnvoll ist dieses Verfahren im Zusammenhang mit
* Sinnvoll ist dieses Verfahren im Zusammenhang mit der Direktive SetEnvIf (siehe Kapitel 14, »CGI«)
der Direktive SetEnvIf (siehe Kapitel 14, »CGI«). Diese setzt eine Variable, wenn die Client-Anfrage eine bestimmte Bedingung erfüllt. Das folgende Beispiel erlaubt den Zugriff nur, wenn das Referer-Feld der Client-Anfrage mit
* Diese setzt eine Variable, wenn die Client-Anfrage eine bestimmte Bedingung erfüllt
* Das folgende Beispiel erlaubt den Zugriff nur, wenn das Referer-Feld der Client-Anfrage mit


http://www.mynet.de beginnt, das heißt, wenn die aktuelle Anfrage durch
http://www.mynet.de beginnt, das heißt, wenn die aktuelle Anfrage durch einen Hyperlink von der eigenen Website aus zustande kam
einen Hyperlink von der eigenen Website aus zustande kam:


SetEnvIf Referer "^http://www.mynet.de" locallink
SetEnvIf Referer "^http://www.mynet.de" locallink Order Deny,Allow Deny from all Allow from env=locallink
Order Deny,Allow
Deny from all
Allow from env=locallink


Dies ist eine mögliche Methode, um Gefahren durch Cross-Site-Scripting zu
Dies ist eine mögliche Methode, um Gefahren durch Cross-Site-Scripting zu verringern
verringern.
Ab Version 2.3 kann folgende Variante verwendet werden
Ab Version 2.3 kann folgende Variante verwendet werden:


SetEnvIf Referer "^http://www.mynet.de" locallink
SetEnvIf Referer "^http://www.mynet.de" locallink Require env locallink
Require env locallink


Oder sogar noch kürzer:
Oder sogar noch kürzer


Require expr "%{HTTP_REFERER} =~ m#^http://www.mynet.de"
Require expr "%{HTTP_REFERER} =~ m#^http://www.mynet.de"


Deny
Deny Legt fest, welche Hosts nicht auf einen Site-Bereich zugreifen dürfen
Legt fest, welche Hosts nicht auf einen Site-Bereich zugreifen dürfen.


Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access
Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access Kontext <Directory>, <Location>, <Files>, .htaccess (Limit)
Kontext <Directory>, <Location>, <Files>, .htaccess (Limit)
Syntax Deny from all | Host | env=Umgebungsvariable [Host |
Syntax Deny from all | Host | env=Umgebungsvariable [Host |
env=Umgebungsvariable ...]
env=Umgebungsvariable ...]
Standardwert nicht gesetzt
Standardwert nicht gesetzt


Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, ersetzt. Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul
Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, ersetzt
mod_access_compat unterstützt, dürfte aber mittelfristig ganz abgeschafft werden.
* Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul mod_access_compat unterstützt, dürfte aber mittelfristig ganz abgeschafft werden


Die Syntax von Deny ist mit Allow identisch. Die Direktive bestimmt, welche
Die Syntax von Deny ist mit Allow identisch
Hosts vom Zugriff auf eine Server-Ressource ausgeschlossen sind. In welcher Reihenfolge Allow und Deny ausgewertet werden, regelt die bereits besprochene
* Die Direktive bestimmt, welche Hosts vom Zugriff auf eine Server-Ressource ausgeschlossen sind
Direktive Order.
* In welcher Reihenfolge Allow und Deny ausgewertet werden, regelt die bereits besprochene Direktive Order


Das folgende Beispiel verbietet zunächst einmal allen Hosts den Zugriff und
Das folgende Beispiel verbietet zunächst einmal allen Hosts den Zugriff und erlaubt ihn anschließend Hosts aus den Domains office.mynet.de und external.mynet.de
erlaubt ihn anschließend Hosts aus den Domains office.mynet.de und external.mynet.de:


Order Deny,Allow
Order Deny,Allow Deny from all Allow from office.mynet.de external.mynet.de
Deny from all
Allow from office.mynet.de external.mynet.de


In Apache 2.4 genügt dazu folgende Zeile:
In Apache 2.4 genügt dazu folgende Zeile


Require host office.mynet.de external.mynet.de
Require host office.mynet.de external.mynet.de


Dieses Beispiel erlaubt dagegen allen Hosts den Zugriff, die nicht zur Domain
Dieses Beispiel erlaubt dagegen allen Hosts den Zugriff, die nicht zur Domain unsere-konkurrenz.de4 gehören
unsere-konkurrenz.de4 gehören:


Order Allow,Deny
Order Allow,Deny Allow from all Deny from unsere-konkurrenz.de
Allow from all
Deny from unsere-konkurrenz.de


In Versionen ab 2.3-beta können Sie dies folgendermaßen ausdrücken:
In Versionen ab 2.3-beta können Sie dies folgendermaßen ausdrücken


<RequireAll>
<RequireAll>
Require all granted
Require all granted Require not host unsere-konkurrenz.de
Require not host unsere-konkurrenz.de
</RequireAll>
</RequireAll>


AllowMethods
AllowMethods Legt fest, welche HTTP-Zugriffsmethoden in einem bestimmten Kontext erlaubt sind
Legt fest, welche HTTP-Zugriffsmethoden in einem bestimmten Kontext erlaubt
sind.


Seit Version 2.3
Seit Version 2.3
Modul mod_allowmethods
Modul mod_allowmethods Kontext <Directory>, <Location>, <Files>
Kontext <Directory>, <Location>, <Files>
Syntax AllowMethod HTTP-Methode [HTTP-Methode ...]
Syntax AllowMethod HTTP-Methode [HTTP-Methode ...]
Standardwert nicht gesetzt
Standardwert nicht gesetzt


Das neue Modul mod_allowmethods stellt die Direktive AllowMethods zur Verfügung. Diese ermöglicht innerhalb eines Verzeichniskontextes die Angabe der
Das neue Modul mod_allowmethods stellt die Direktive AllowMethods zur Verfügung
HTTP-Anfragemethoden, mit denen Benutzer auf die Ressourcen innerhalb des
* Diese ermöglicht innerhalb eines Verzeichniskontextes die Angabe der HTTP-Anfragemethoden, mit denen Benutzer auf die Ressourcen innerhalb des Verzeichnisses zugreifen dürfen
Verzeichnisses zugreifen dürfen. Dies ist einfacher als mit <Limit>-Containern, aber zurzeit gilt das Modul noch als experimentell.
* Dies ist einfacher als mit <Limit>-Containern, aber zurzeit gilt das Modul noch als experimentell


Das folgende Beispiel erlaubt im aktuellen Kontext die Methoden GET, POST und
Das folgende Beispiel erlaubt im aktuellen Kontext die Methoden GET, POST und HEAD
HEAD:


AllowMethods GET POST HEAD
AllowMethods GET POST HEAD


4 Natürlich nützt das in dieser Form nichts, weil die normalen Büro-PCs der auszuschließenden Konkurrenzfirma wahrscheinlich mit temporären IP-Adressen und Domain-Namen
4 Natürlich nützt das in dieser Form nichts, weil die normalen Büro-PCs der auszuschließenden Konkurrenzfirma wahrscheinlich mit temporären IP-Adressen und Domain-Namen wie xdsl-client-08-15.t-online.de im Netz unterwegs sind. Überdies könnten Sie rechtliche Probleme bekommen (unlauterer Wettbewerb), wenn Sie die Konkurrenz explizit vom Zugriff auf Seiten ausschließen, die ansonsten für alle Welt zugänglich sind
wie xdsl-client-08-15.t-online.de im Netz unterwegs sind. Überdies könnten Sie rechtliche
Probleme bekommen (unlauterer Wettbewerb), wenn Sie die Konkurrenz explizit vom
Zugriff auf Seiten ausschließen, die ansonsten für alle Welt zugänglich sind.


Voreinstellung für alle Verzeichnisse
Voreinstellung für alle Verzeichnisse Aus Sicherheitsgründen sollten Sie – wie in einigen speziellen Zusammenhängen bereits erwähnt – zunächst einmal Einstellungen für das Wurzelverzeichnis (/)
Aus Sicherheitsgründen sollten Sie – wie in einigen speziellen Zusammenhängen
vornehmen
bereits erwähnt – zunächst einmal Einstellungen für das Wurzelverzeichnis (/)
* Sämtliche Zugriffe und Optionen sollten hier verboten werden
vornehmen. Sämtliche Zugriffe und Optionen sollten hier verboten werden.
Diese Einstellungen werden von allen unspezifizierten Verzeichnissen sowie allen <Directory>-, <Files>- und <Location>-Containern automatisch übernommen
Diese Einstellungen werden von allen unspezifizierten Verzeichnissen sowie
* Anschließend können Sie für einzelne untergeordnete Ressourcen jeweils die benötigten Optionen freischalten
allen <Directory>-, <Files>- und <Location>-Containern automatisch übernommen. Anschließend können Sie für einzelne untergeordnete Ressourcen jeweils
die benötigten Optionen freischalten.


Ein üblicher Grundeinstellungs-Container sieht beispielsweise so aus:
Ein üblicher Grundeinstellungs-Container sieht beispielsweise so aus


<Directory />
<Directory />
# Alle Optionen deaktivieren
# Alle Optionen deaktivieren Options None
Options None
# Sämtliches Überschreiben durch .htaccess dekativieren AllowOverride None
# Sämtliches Überschreiben durch .htaccess dekativieren
# Zugriffe aller Clients verbieten Require all denied
AllowOverride None
# Zugriffe aller Clients verbieten
Require all denied
# Bis 2.2 werden statt "Require all denied"
# Bis 2.2 werden statt "Require all denied"
# folgende zwei Zeilen verwendet:
# folgende zwei Zeilen verwendet
#Order Deny,Allow
#Order Deny,Allow
#Deny from all
#Deny from all
</Directory>
</Directory>


Die vorgefertigte Konfigurationsdatei enthält normalerweise nicht die Angabe
Die vorgefertigte Konfigurationsdatei enthält normalerweise nicht die Angabe Options None, sondern Options FollowSymLinks
Options None, sondern Options FollowSymLinks. Auf einem Server, den Sie allein
* Auf einem Server, den Sie allein verwalten, ist dies kein großes Problem, da Sie selbst entscheiden können, welche symbolischen Links Sie überhaupt anlegen möchten
verwalten, ist dies kein großes Problem, da Sie selbst entscheiden können, welche symbolischen Links Sie überhaupt anlegen möchten. Andererseits schadet es
* Andererseits schadet es auch nichts, FollowSymLinks global zu deaktivieren und dann zusammen mit den anderen Optionen jeweils im Einzelfall einzuschalten
auch nichts, FollowSymLinks global zu deaktivieren und dann zusammen mit den
anderen Optionen jeweils im Einzelfall einzuschalten.


Sinnvolle Einstellungen für die DocumentRoot
Sinnvolle Einstellungen für die DocumentRoot Die DocumentRoot bildet, wie erwähnt, das Wurzelverzeichnis der Website, die Apache ausliefert, wenn kein virtueller Host angesprochen wurde
Die DocumentRoot bildet, wie erwähnt, das Wurzelverzeichnis der Website, die
* Für dieses Verzeichnis müssen Sie demzufolge einige Einstellungen der globalen Verzeichniskonfiguration überschreiben, um die Website im Internet zu veröffentlichen
Apache ausliefert, wenn kein virtueller Host angesprochen wurde. Für dieses Verzeichnis müssen Sie demzufolge einige Einstellungen der globalen Verzeichniskonfiguration überschreiben, um die Website im Internet zu veröffentlichen.
Hier zunächst ein typisches Beispiel
Hier zunächst ein typisches Beispiel:


<Directory /usr/local/share/apache2/htdocs>
<Directory /usr/local/share/apache2/htdocs>
Options Indexes FollowSymLinks MultiViews
Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted
AllowOverride None
Require all granted


# Bis 2.2 folgende zwei Zeilen anstelle von "Require all granted":
# Bis 2.2 folgende zwei Zeilen anstelle von "Require all granted"
#Order allow,deny
#Order allow,deny
#Allow from all
#Allow from all
</Directory>
</Directory>


Bei dieser Konfiguration sind die Optionen Indexes, FollowSymLinks und
Bei dieser Konfiguration sind die Optionen Indexes, FollowSymLinks und MultiViews eingeschaltet
MultiViews eingeschaltet. Wenn Sie mit Server Side Includes arbeiten möchten
* Wenn Sie mit Server Side Includes arbeiten möchten
(siehe Kapitel 16, »SSI und Filter«), müssen Sie zusätzlich Includes aktivieren. Für
(siehe Kapitel 16, »SSI und Filter«), müssen Sie zusätzlich Includes aktivieren
CGI sollte dagegen in der Regel nicht ExecCGI verwendet werden, sondern ein
* Für CGI sollte dagegen in der Regel nicht ExecCGI verwendet werden, sondern ein per ScriptAlias in die DocumentRoot abgebildetes cgi-bin-Verzeichnis (Genaueres dazu in Kapitel 14, »CGI«)
per ScriptAlias in die DocumentRoot abgebildetes cgi-bin-Verzeichnis (Genaueres
dazu in Kapitel 14, »CGI«).


Die Verwendung von .htaccess-Dateien wurde hier ebenfalls abgeschaltet. In
Die Verwendung von .htaccess-Dateien wurde hier ebenfalls abgeschaltet
Abschnitt 6.2, »Kontexte und Container«, wurde bereits begründet, warum dies
* In Abschnitt 6.2, »Kontexte und Container«, wurde bereits begründet, warum dies in den meisten Fällen ratsam ist
in den meisten Fällen ratsam ist.


Zu guter Letzt wurde der Zugriff auf die Site für beliebige Hosts gestattet.
Zu guter Letzt wurde der Zugriff auf die Site für beliebige Hosts gestattet


<noinclude>
<noinclude>

Version vom 11. Januar 2025, 13:43 Uhr

Apache2.4/06 Grundkonfiguration/3 Allgemeine Direktiven - Allgemeine Konfigurationsdirektiven

Beschreibung

Direktiven für den grundlegenden Betrieb von Apache und einer einfachen Website aus statischen Dokumenten

  • Es handelt sich ausschließlich um solche Konfigurationsanweisungen, die zum Kern des Servers (core) gehören oder
  • in MPM-Modulen und in solchen Modulen verfügbar sind, die standardmäßig zu Apache gehören und aktiviert sind

Server-Umgebung

Wie bereits erwähnt, bilden die grundlegenden Programmeinstellungen den ersten Abschnitt der Datei httpd.conf

  • In der automatisch generierten Konfigurationsdatei einer normalen Apache-Installation bis 2.0 wurde der Abschnitt durch folgenden Kommentar charakterisiert
      1. Section 1: Global Environment
  1. The directives in this section affect the overall operation
  2. of Apache, such as the number of concurrent requests it can
  3. handle or where it can find its configuration files

Hier wird beispielsweise das grundlegende Verzeichnis wichtiger Server-Ressourcen (ServerRoot) festgelegt

  • Außerdem werden hier die DSO-Module geladen, und das grundlegende Verhalten des Servers bei der Verarbeitung von Anfragen wird konfiguriert
  • Die Direktiven werden hier in der Reihenfolge behandelt, in der sie in der Standarddatei stehen

ServerRoot Stammverzeichnis der Apache-Installation; enthält unter anderem die Verzeichnisse conf/ und logs/

Modul core Kontext Server Syntax ServerRoot Pfad Standardwert PREFIX der Installation

Zahlreiche Pfade in der Apache-Konfiguration können relativ zu dem hier eingestellten Verzeichnis angegeben werden

  • Insbesondere die Verzeichnisse für die Konfigurationsdateien (conf/) und die Log-Dateien (logs/) müssen sich normalerweise unterhalb des hier eingestellten Verzeichnisses befinden
  • Welcher Wert hier eingestellt werden muss, variiert je nach Plattform und Installationslayout

In Kapitel 4, »Apache kompilieren und installieren«, finden Sie die passenden Angaben für verschiedene UNIX-Systeme und für Windows: Auf UNIX-Rechnern handelt es sich um das beim Kompilieren angegebene PREFIX, bei Windows um das übergeordnete Verzeichnis der Apache-Installation

  • Beispiele

ServerRoot /usr/local/httpd # UNIX ServerRoot "C:/Programme/Apache Group/Apache2" # Windows

Beachten Sie, dass der Wert dieser Direktive (im Gegensatz zu zahlreichen anderen Konfigurationsanweisungen, deren Wert ein Verzeichnis ist) keinen abschließenden Slash enthalten darf

TimeOut Wartezeit, bis die Verarbeitung einer Anfrage abgebrochen wird

Modul core Kontext Server Syntax TimeOut Sekunden Standardwert 300

Die Direktive TimeOut legt die Wartezeit für drei verschiedene Aspekte einer HTTP-Transaktion fest

  • die maximale Gesamtdauer einer GET-Anfrage
  • die maximale Wartezeit zwischen zwei TCP-Paketen einer POST- oder PUTAnfrage
  • die maximale Wartezeit zwischen zwei Empfangsbestätigungen (ACK) für TCPPakete der Server-Antwort

In der Regel gibt es keinen Grund, an den (recht großzügig) voreingestellten 300 Sekunden etwas zu ändern

  • Für zukünftige Apache-Versionen ist allerdings geplant, die drei Werte getrennt konfigurierbar zu machen
  • Siehe auch »RequestReadTimeout« auf Seite 259

KeepAlive Persistente Verbindungen gemäß HTTP/1.1-Spezifikation

Modul core Kontext Server, <VirtualHost> Syntax KeepAlive On|Off Standardwert On

Diese Direktive regelt, ob Apache 2 grundsätzlich persistente HTTP-Verbindungen zulässt, also mehrere Anfragen über ein und dieselbe Verbindung abhandelt Clients, die HTTP/1.1 verwenden, erwarten standardmäßig eine persistente Verbindung, HTTP/1.0-Clients dagegen nur, wenn sie den Header Connection Keep-Alive senden

  • Es gibt im Allgemeinen keinen Grund, KeepAlive grundsätzlich abzuschalten
  • Für einzelne Clients, die damit Schwierigkeiten haben, können Sie über eine BrowserMatch-Direktive die Option nokeepalive setzen (siehe Kapitel 14, »CGI«)

MaxKeepAliveRequests Zulässige Höchstzahl von Anfragen über eine persistente Verbindung

Modul core Kontext Server, <VirtualHost> Syntax MaxKeepAliveRequests Anzahl Standardwert 100

Diese Direktive legt fest, wie viele aufeinanderfolgende HTTP-Anfragen über ein und dieselbe persistente HTTP-Verbindung abgehandelt werden

  • Der Wert 0

steht für beliebig viele Anfragen

  • Er sollte nicht verwendet werden, weil er möglicherweise die Gefahr von Denial-of-Service-Attacken erhöht
  • Ein relativ hoher Wert ist dagegen gut für die Server-Performance, da persistente Verbindungen besonders die Auslieferung von HTML-Dokumenten mit zahlreichen eingebetteten Bildern beschleunigen
  • Beispiel

MaxKeepAliveRequests 200

KeepAliveTimeout Maximale Zeitspanne für nachfolgende Anfragen innerhalb einer persistenten Verbindung

Seit Version 1.x; Zeitangaben in Millisekunden seit 2.3.2 Modul core Kontext Server, <VirtualHost> Syntax KeepAliveTimeout Zeitwert[ms] Standardwert 15

Mithilfe dieser Konfigurationsanweisung können Sie festlegen, wie viele Sekunden Apache eine persistente Verbindung nach dem Abschluss einer Anfrage offen halten und auf eine weitere Anfrage warten soll

  • Es ist ein wenig schwierig, den richtigen Wert zu finden: Die Zeitspanne darf nicht zu kurz sein, weil sie persistente Verbindungen ansonsten in der Praxis verhindert, sie sollte aber auch nicht zu lang sein, damit der Server nicht zu stark durch unnütz offen gehaltene Verbindungen belastet wird
  • Die Voreinstellung von 15 Sekunden ist in der Regel in Ordnung – bei einem sehr beschäftigten Server sollten Sie allerdings einen kürzeren Wert wählen

Seit Version 2.3.2 können Sie den Zeitwert auch in Millisekunden angeben

  • Dazu müssen Sie hinter der Zahl das Kürzel ms notieren
  • Beispiel

KeepAliveTimeout 1500ms

RequestReadTimeout Timeouts für den Empfang von Anfrage-Header und -Body von Clients

Seit Version 2.2.15 Modul mod_reqtimeout Kontext Server, <VirtualHost> Syntax RequestReadTimeout [header=Timeout[-max.Timeout][,MinRate=Rate] [body=Timeout[-max.Timeout][,MinRate=Rate] Standardwert header=20-40,MinRate=500 body=20,MinRate=500

Seit Apache 2.2.15 ist das Modul mod_reqtimeout verfügbar, mit dem Timeouts und Mindestdatenraten für die Header und den Body einer Client-Anfrage gesetzt werden können

  • Das Modul definiert lediglich die Direktive RequestReadTimeout

Für die Header und den Body werden jeweils separate Werte angegeben

  • Es gibt drei mögliche Wertangaben
  • Ein numerischer Wert: Angabe des Gesamt-Timeout-Werts in Sekunden
  • Zwei numerische Werte (m-n mit m < n): Der erste Wert gibt an, wie lange auf den Beginn der Datenübertragung gewartet wird
  • Findet dieser innerhalb der angegebenen Zeit statt, tritt der zweite Wert als Timeout für die gesamte Datenübertragung in Kraft
  • Zusatzangabe MinRate=n: Nach dem Empfang von n Byte wird der TimeoutWert beziehungsweise der maximale Timeout-Wert um eine Sekunde erhöht

Beispiele

RequestReadTimeout header=5 body=20

Es wird maximal 5 Sekunden auf den Empfang des gesamten Headers und 20 Sekunden auf den Empfang des Bodys gewartet

RequestReadTimeout header=5,MinRate=1000 \ body=20-40,MinRate=1000

Für den Header gelten 5 Sekunden, die pro 1.000 empfangenen Byte um eine Sekunde erhöht werden

  • Beim Body werden 20 Sekunden bis zum Beginn der Datenübertragung gewährt und insgesamt maximal 40 Sekunden; letztere werden wiederum pro 1.000 Byte um eine Sekunde erhöht

RequestReadTimeout header=0 body=0

Deaktiviert die Funktionalität der Direktive – beispielsweise für einen VHost, bei dem Sie wissen, dass er mit besonders langsamen Clients zusammenarbeiten muss

Listen TCP-Port (und IP-Adresse), an der der Webserver lauscht

Seit Version 1.x; seit 2.0 vorgeschrieben; Protokoll seit 2.1.5 Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event Kontext Server Syntax Listen [IP-Addr:]Port [Protokoll] Standardwert 80

Dies ist eine der wichtigsten Konfigurationsdirektiven

  • Sie bestimmt, an welchen TCP-Ports der Apache-Webserver auf eingehende Verbindungen lauscht
  • Da die TCP/IP-Implementierung trotz der APR-Abstraktionsschicht plattformspezifisch ist, wurde diese Direktive in den MPM-Modulen und nicht im core implementiert

Wird nur ein TCP-Port angegeben, dann lauscht der Server über alle Netzwerkschnittstellen an diesem Port

  • Wenn Sie Verbindungen nur über bestimmte Schnittstellen zulassen möchten, können Sie vor dem Port, durch einen Doppelpunkt getrennt, eine IP-Adresse angeben
  • Anstelle IPv4-Adressen können übri

gens auch IPv6-Adressen verwendet werden; da diese Doppelpunkte enthalten, müssen sie zusätzlich in eckigen Klammern stehen, um sie korrekt von der Portangabe zu trennen

  • Wenn Ihr Server an mehreren Ports lauschen soll, müssen Sie mehrere Listen-Anweisungen untereinanderschreiben; die Direktive kann nur jeweils einen Wert haben
  • Wenn Sie ein anderes Protokoll verwenden möchten als das Standardprotokoll (zum Beispiel HTTP auf Port 80 oder HTTPS auf Port

443), dann können Sie es optional als zusätzlichen Parameter angeben

Beachten Sie, dass Listen nur im Server-Kontext stehen darf

  • Wenn Sie virtuelle Hosts verwenden, müssen zunächst die IP-Adressen und Ports für den »Hauptserver« und alle virtuellen Hosts angegeben werden
  • Anschließend können Sie sie mithilfe von <VirtualHost>-Containern nach Wunsch aufteilen
  • Beispiele

Listen 8080 http Listen 196.23.17.3:80 Listen [fe80::3a0:93a2:5a5b:3ab1]:80

Protocol Protokoll für ein lauschendes Socket festlegen

Seit Version 2.1.5 (für Windows seit 2.3.3) Modul core Kontext Server, <VirtualHost> Syntax Protocol Protokoll Standardwert nicht gesetzt

Wenn Sie HTTP oder HTTPS nicht auf den Standard-Ports (80 beziehungsweise 443) betreiben, können Sie mit Hilfe dieser Direktive das Protokoll für den aktuellen Kontext angeben

  • Dies dient der Auswahl des passenden Moduls und der Verarbeitung protokollspezifischer Optionen durch AcceptFilter
  • Das folgende Beispiel stellt https für einen Nicht-Standard-Port ein

Protocol https

Alternativ kann das Protokoll auch über Listen eingestellt werden

Mutex Allgemeine Methode für alle Serialisierungsaufgaben

Seit Version 2.3.4 Modul core Kontext Server

Syntax Mutex-Mechanismus Default|Methode [OmitPID] Standardwert Default

Manche Vorgänge in einem Webserver erfordern, dass sie nur jeweils einmal zur selben Zeit ausgeführt werden dürfen

  • Um dies sicherzustellen, wird ein MutexVerfahren verwendet (mutual exclusion, also gegenseitiger Ausschluss)
  • Bis einschließlich Version 2.2 gibt es diverse Einzeldirektiven, die Mutex-Einstellungen für verschiedene Vorgänge vornehmen
  • In Version 2.3.4 wurde dann die zentrale Direktive Mutex eingeführt, die alle anderen Mutex-Direktiven ersetzt

Der erste Parameter, der Mechanismus, bestimmt, für welchen der verschiedenen Anwendungsfälle Sie einen Mutex definieren möchten

  • Verfügbar sind zurzeit folgende (Drittanbieter-Module können jedoch zusätzliche MechanismusNamen definieren)
  • mpm_accept (Module prefork und worker): Vermeidung des »ThunderingHerd«-Problems (donnernde Herde) beim Verbindungseingang; ersetzt die veraltete, im vorliegenden Kapitel beschriebene Direktive AcceptMutex
  • authdigest_client (mod_auth_digest): Zugriff auf die Client-Liste im Shared Memory (siehe Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)
  • authdigest_opaque (mod_auth_digest): Zugriff auf den Counter im Shared Memory (Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)
  • ldap_cache (mod_ldap): Zugriff auf den Cache für LDAP-Abfrage-Ergebnisse

(Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)

  • rewrite_map (mod_rewrite): Vermeidung vermischter Ein-/Ausgabedaten beim Zugriff mehrerer Anfragen auf externe RewriteMap-Programme (Kapitel 8, »Weiterleitungen und Indizes«)
  • ssl_cache (mod_ssl): Zugriff auf den SSL-Session-Cache (Kapitel 10, »Gesicherte Verbindungen«)
  • ssl_stapling (mod_ssl): Zugriff auf den OCSP-Stapling-Cache (Kapitel 10, »Gesicherte Verbindungen«)
  • watchdog_callback (mod_watchdog): Callback-Funktion des jeweiligen ClientModuls (mod_watchdog ist ein neues Modul, das noch nicht dokumentiert wurde, und wird daher in diesem Buch noch nicht beschrieben)

Der zweite Parameter ist die Mutex-Methode

  • In Versionen vor 2.0 konnte diese nur einmalig bei der Kompilierung angepasst werden
  • Das funktioniert in Versionen ab 2.0 noch immer
  • Die Flags, die Sie für den jeweiligen Wert beim Aufruf des configure-Skripts setzen müssen, werden bei den entsprechenden Angaben für die Direktive genannt
  • flock: Apache verwendet den Systemaufruf flock(), um eine Dateisperre auf die mithilfe von LockFile definierte Datei zu errichten und später wieder aufzuheben
  • Um dies bei der Kompilierung als Standard zu setzen, müssen Sie configure mit folgender Option aufrufen

CFLAGS="-D APR_USE_FLOCK_SERIALIZE"

  • fcntl: Der Systemaufruf fctnl() wird benutzt, um die durch LockFile festgelegte Datei zu sperren und wieder zu entsperren

configure: -D APR_USE_FCNTL_SERIALIZE

  • posixsem: Apache verwendet mit POSIX kompatible Semaphore als Warteschlangen

configure: -D APR_USE_POSIXSEM_SERIALIZE

  • sysvsem: Es werden mit System V kompatible Semaphore als Warteschlangen benutzt
  • Diese Einstellung wird zurzeit nur unter dem Betriebssystem IRIX verwendet

configure: -D APR_USE_SYSVSEM_SERIALIZE

  • sem: Es wird jeweils die »beste« verfügbare Semaphoren-Implementierung ausgewählt, also je nach System entweder posixsem oder sysvsem
  • Einen eigenen configure-Wert hierfür gibt es logischerweise nicht
  • pthread: Apache benutzt POSIX-Mutexe, die der POSIX-Thread-Spezifikation genügen

configure: -D APR_USE_PTHREAD_SERIALIZE

  • Default: Der bei der Kompilierung festgelegte Wert wird verwendet

Zusätzlich können Sie noch das Schlüsselwort OmitPID angeben, um zu verhindern, dass die Prozess-ID des Parent-Prozesses an den Namen der Mutex-Datei angehängt wird

AcceptFilter Optimierung für die lauschenden Sockets bestimmter Protokolle

Seit Version 2.1.5 Modul core Kontext Server Syntax AcceptFilter Protokoll Filter Standardwert nicht gesetzt

Unter einigen Betriebssystemen existieren spezielle Kernel-Filter, die die Performance von TCP/IP-Anwendungsprotokollen durch Pufferung verbessern können In der Praxis sind dies die Accept-Filter von FreeBSD sowie die TCP_DEFER_ ACCEPT-Filter von Linux

Die passenden Werte unter FreeBSD sind

AcceptFilter http httpready AcceptFilter https dataready

httpready puffert die gesamte HTTP-Anfrage auf Kernel-Ebene und gibt sie erst dann an den Server weiter, wenn sie vollständig ist

  • Die Vollständigkeit von HTTPS-Anfragen kann der Kernel dagegen aufgrund der Verschlüsselung nicht erkennen; deshalb wird hier dataready verwendet
  • Näheres steht in den FreeBSD-Manpages zu accf_http(9) beziehungsweise accf_data(9)

Auf Linux-Systemen steht dagegen nur der Filter data zur Verfügung

AcceptFilter http data AcceptFilter https data

Weitere Informationen über TCP_DEFER_ACCEPT liefert die Linux-Manpage zu tcp(7)

Für Protokolle, die vor dem Senden auf eine Server-Meldung warten, empfiehlt sich dagegen der Wert none – die Apache-Online-Dokumentation nennt als Beispiel NNTP

AcceptFilter nntp none

LoadModule Das angegebene DSO-Modul laden und aktivieren

Modul mod_so Kontext Server Syntax LoadModule Modul Dateiname Standardwert nicht gesetzt

Wenn Sie einen Apache-Webserver mit DSO-Unterstützung betreiben (siehe Kapitel 4, »Apache kompilieren und installieren«) und ein DSO-Modul laden möchten, wird dazu die Direktive LoadModule verwendet

  • Sie benötigt zwei Parameter: einen kanonischen Modulnamen sowie den Pfad und Dateinamen des gewünschten Moduls
  • Der Dateiname hat jeweils das Format mod_xxx.so.2 Beim kanonischen Namen werden das Präfix mod_ und die Dateiendung .so weggelas

sen; dafür wird _module angehängt (z.B

  • xxx_module)
  • Die Pfadangabe wird relativ zur ServerRoot interpretiert, falls sie keinen absoluten Pfad enthält
  • Das folgende Beispiel lädt das Modul mod_dir

LoadModule dir_module modules/mod_dir.so

Bei manchen Modulen heißt die eigentliche DSO-Datei nicht mod_xxx.so, sondern anders

  • Dies ist beispielsweise bei PHP (siehe Kapitel 15, »Technologien zur Webprogrammierung«) der Fall

LoadModule php5_module modules/libphp5.so

LoadFile Die angegebene Objektdatei oder Bibliothek laden

Modul mod_so Kontext Server Syntax LoadFile Dateiname [Dateiname ...] Standardwert nicht gesetzt

Einige Module benötigen Unterstützung durch zusätzliche Dateien

  • Eine solche externe Bibliothek oder Objektdatei wird mithilfe von LoadFile geladen
  • Sie können eine oder mehrere zu ladende Dateien angeben
  • Das folgende Beispiel lädt auf einem Windows-Rechner den Perl-Interpreter, der für das Modul mod_perl

(siehe Kapitel 15, »Technologien zur Webprogrammierung«) benötigt wird, und anschließend mod_perl selbst

LoadFile "C:/Perl/bin/perl58.dll" LoadModule perl_module modules/mod_perl.so

TraceEnable Bestimmt das Verhalten bei TRACE-Anfragen

Seit Version 1.3.34 und 2.0.55 Modul core Kontext Server Syntax TraceEnable on|off|extended Standardwert On

2 Unter Windows handelt es sich bei DSO-Modulen formal um DLL-Dateien

  • Trotzdem wurde seit Apache 1.3.15 auch auf dieser Plattform die Dateiendung .so eingeführt

Diese Direktive ermöglicht es, das Verhalten von Apache bei HTTP-Anfragen mit der Methode TRACE, die eine Liste der zum Erreichen einer URL verwendeten Proxy-Server zurückgibt (siehe Kapitel 2, »Funktionsweise von Webservern«), zu modifizieren

  • Die Standardeinstellung on besagt, dass TRACE-Anfragen erlaubt sind, aber im Einklang mit RFC 2616 keinen Anfrage-Body enthalten dürfen

TraceEnable off verbietet TRACE-Anfragen ganz und sendet dem Client eine Antwort mit dem Status 405 Method not allowed

Ein vom HTTP-Standard abweichendes Verhalten können Sie mit dem Wert extended erreichen: Die Anfragen dürfen einen Body enthalten

  • Dieser ist auf 64

Kilobyte beschränkt; hinzu kommen maximal 8 Kilobyte für Chunk-Header, wenn Transfer-Encoding: chunked verwendet wird

  • Diese Einschränkungen gelten nicht, wenn Apache als Proxy eingesetzt wird (siehe Kapitel 13, »Proxy- und Cache-Funktionen«)
  • In diesem Modus gibt die Antwort im Body alle Header zurück
  • Diese Variante ist vor allem für Debugging- und Testzwecke geeignet

Plattformspezifische Einstellungen

Die Konfigurationsanweisungen in diesem Abschnitt betreffen ebenfalls das allgemeine Verhalten des Server-Programms

  • Sie sind allerdings nicht im Core, sondern in diversen MPM-Modulen definiert, weil sie nicht für alle Plattformen und Laufzeitmodelle von Apache festgelegt sind
  • Aufgrund ihrer besonderen Wichtigkeit wurde die Direktive Listen bereits im vorangegangenen Abschnitt behandelt, obwohl sie ebenfalls zu den MPM-Direktiven gehört

Lesen Sie auch die Beschreibungen der diversen Multiprocessing-Module in Kapitel 3, »Apache 2 im Überblick«

  • Dort wird erläutert, auf welche Weise die MPMs Gebrauch von Prozessen und Threads machen
  • Dies verdeutlicht die Zusammenhänge zwischen den zahlreichen Direktiven, die deren Anzahl festlegen

Beachten Sie, dass sich einige Direktiven in diesem Abschnitt nicht durch einen normalen Neustart von Apache 2 aktivieren lassen

  • Stattdessen müssen Sie dafür den Server komplett beenden und wieder starten
  • Dies betrifft vor allem die maximal konfigurierbaren Werte ServerLimit und ThreadLimit
GracefulShutdownTimeout Wartezeit, nach der Apache bei graceful-stop auf jeden Fall beendet wird
Seit Version 2.2
Modul prefork, worker, event
Kontext Server
Syntax GracefulShutdownTimeout Sekunden
Standardwert 0

Ein neues Feature von Apache 2.2 ist das saubere Beenden, das heißt, der Hauptprozess wird erst beendet, wenn die Worker-Prozesse oder -Threads mit dem Verarbeiten der aktuellen Anfragen fertig sind (siehe Kapitel 5, »Apache in Betrieb nehmen«)

  • Diese Direktive bestimmt optional eine maximale Wartezeit in Sekunden; sobald diese erreicht ist, wird Apache sofort beendet
  • Der Vorgabewert 0 bedeutet, dass beliebig lange auf die Worker gewartet wird
  • Das folgende Beispiel legt eine Höchstdauer von zwei Minuten fest
GracefulShutdownTimeout 120
PidFile Datei für die PID des Apache-Hauptprozesses
Modul beos, mpm_winnt, mpmt_os2, prefork, worker, event
Kontext Server
Syntax PidFile Dateiname
Standardwert logs/httpd.pid

Diese Direktive bestimmt den Pfad der PID-Datei: Wie die meisten UNIX-Daemons legt auch der Apache-HTTP-Server die Prozess-ID (PID) seines Hauptprozesses in einer Datei ab, um beispielsweise bei einem Startbefehl zu kontrollieren, ob der Server noch läuft (oder unsauber beendet wurde)

  • In Kapitel 5, »Apache in Betrieb nehmen«, wird erläutert, wie diese Datei auf einem UNIX-Rechner dazu verwendet werden kann, um Apache zu beenden oder neu zu starten

Da nicht jedes Betriebssystem UNIX-artige PIDs verwendet und das Verfahren deshalb nicht auf jede beliebige Plattform portierbar ist, ist die Direktive nicht im core, sondern in den passenden MPM-Modulen definiert

  • Hier ein Beispiel

PidFile /var/run/httpd.pid

Wenn kein absoluter Pfad angegeben wird, interpretiert Apache die Angabe relativ zur ServerRoot

User UNIX-User-ID, unter der Apache Anfragen bearbeitet

Seit Version 1.x; seit 2.0 nur noch Server Modul prefork, worker, event; seit 2.3-beta mod_unixd Kontext Server Syntax User Username | #Usernr Standardwert #-1

Die Direktive User funktioniert nur auf UNIX-Plattformen

  • Sie legt die User-ID fest, unter der Apache Client-Anfragen beantwortet
  • Das betrifft nicht den Hauptprozess, der für die Steuerung des Servers sowie für den Start der eigentlichen Arbeitsprozesse beziehungsweise -Threads zuständig ist – dieser läuft in der Regel unter der User-ID root

Die User-ID kann entweder als Username oder numerisch angegeben werden Wenn Sie eine Usernummer verwenden, muss diese hinter einer Raute stehen Beispiele

User htuser User #103

Per Voreinstellung läuft Apache 2 unter der User-ID -1

  • Dies entspricht auf den meisten Systemen dem User nobody
  • Normalerweise ist dies in Ordnung; nobody ist meist eine Benutzerkennung ohne Shell
  • Selbst wenn sich also jemand über eine Sicherheitslücke die Rechte des Webservers aneignen sollte, wird er es nicht allzu leicht haben, unter dieser User-ID Schaden anzurichten

Noch besser ist es, einen separaten User nur für den Webserver-Betrieb einzurichten

  • Auch in diesem Fall sollten Sie darauf achten, dass sich unter diesem Benutzerkonto niemand persönlich anmelden kann – dies erreichen Sie auf vielen Betriebssystemen, indem Sie die Login-Shell des Kontos auf /bin/false setzen

Darüber hinaus sollte der User einer Group angehören, die ebenfalls exklusiv für den Einsatz von Apache eingerichtet wurde

  • Die beiden folgenden Befehle zur Erstellung einer solchen Group und eines Users sind für Linux geeignet und zeigen sinngemäß, wie es funktioniert
  1. groupadd htgroup
  2. useradd -s /bin/false -g htgroup htuser

Anschließend müssen Sie die neu erstellte User- und Group-ID in der ApacheKonfigurationsdatei eintragen

User htuser Group htgroup

Bitte beachten Sie, dass Sie User niemals auf root setzen sollten!

Group UNIX-Group-ID, unter der Apache Anfragen bearbeitet

Seit Version 1.x; seit 2.0 nur noch Server Modul beos, mpmt_os2, prefork, worker; seit 2.3-beta mod_unixd

Kontext Server Syntax Group Gruppenname | #Gruppennr Standardwert #-1

Unter UNIX wird ein Prozess nicht nur unter einer User-ID, sondern auch unter einer Group-ID ausgeführt

  • Diese Direktive setzt die Group-ID, unter der die Prozesse zur Verarbeitung von Anfragen laufen – der Hauptsteuerprozess ist hier, genau wie bei User, nicht betroffen
  • Gültige Werte für Group sind entweder ein Groupname oder eine Raute mit nachfolgender numerischer ID
  • Die Verwendung der Group-ID root ist natürlich wiederum tabu
  • Hier zwei Beispiele

Group htgroup Group #101

Auch für Group ist der Standardwert -1 (nobody)

  • Bereits bei der Beschreibung von User wurde gezeigt, wie Sie eine separate Group für den Webserver anlegen können, um die Sicherheit noch weiter zu erhöhen

ListenBackLog Gibt die maximale Länge der Warteschlange für eingehende Verbindungsanfragen an

Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event Kontext Server Syntax ListenBackLog Anzahl Standardwert 511

Es wurde in diesem Buch bereits beschrieben, dass zur Verarbeitung eingehender Anfragen normalerweise immer ein gewisser Vorrat an Prozessen oder Threads (je nach MPM) vorhanden ist

  • Bei Spitzenbelastung des Servers kann es allerdings vorkommen, dass er die Reserve-Prozesse beziehungsweise -Threads nicht schnell genug erzeugt
  • Ist der Vorrat völlig aufgebraucht, dann werden weitere ankommende Anfragen in eine Warteschlange des lauschenden Sockets gestellt
  • Diese Direktive definiert die maximale Anzahl wartender Verbindungen in dieser Warteschlange
  • Sobald wieder Worker verfügbar sind, werden die Anfragen in Eingangsreihenfolge bearbeitet (FIFO-Prinzip)

Normalerweise brauchen Sie den voreingestellten Wert niemals anzupassen

  • Es kann höchstens angebracht sein, ihn kurzfristig massiv zu erhöhen, wenn Sie von einer SYN-Flood-Attacke betroffen sind (Überschwemmung durch eintreffende TCP-Pakete mit gesetztem SYN-Flag), damit die SYN-Flood-Pakete nicht den gesamten Vorrat für sich beanspruchen, was zum Denial of Service führt

Der tatsächliche Maximalwert ist übrigens an die Kernel-Konstante SOMAXCONN gebunden, die angibt, wie viele Verbindungen ein lauschendes Socket überhaupt annehmen kann

  • Wenn für ListenBackLog ein Wert angegeben wird, der SOMAXCONN übersteigt, dann wird dieser ignoriert
  • Wie sich SOMAXCONN gegebenenfalls anpassen lässt, entnehmen Sie bitte der Dokumentation Ihres Betriebssystems

AcceptMutex Methode zur Serialisierung von Child-Prozessen, die Anfragen an NetzwerkSockets annehmen

Version 2.0 bis 2.2 Modul prefork, worker, event Kontext Server Syntax AcceptMutex Default|Methode Standardwert Default

Die verschiedenen Worker-Child-Prozesse oder -Threads rufen für jedes lauschende Socket select() auf, um in Erfahrung zu bringen, ob an diesem Socket eine Verbindungsanfrage wartet

  • Gleichzeitige select()-Aufrufe könnten dazu führen, dass einer oder mehrere von ihnen blockieren
  • Deshalb bestimmt diese Direktive, auf welche Weise Apache dafür sorgt, dass sie select() nur nacheinander aufrufen

In Version 2.3.4 wurde die allgemeine Direktive Mutex eingeführt (siehe Seite 261), sodass AcceptMutex und andere spezifische Mutex-Direktiven abgeschafft wurden

  • Die möglichen Werte entsprechen den in der Beschreibung von Mutex angegebenen Methoden

CoreDumpDirectory Verzeichnis, in das Apache vor einem CoreDump zu wechseln versucht

Seit Version 2.0 Modul beos, mpm_winnt, prefork, worker, event Kontext Server Syntax CoreDumpDirectory Verzeichnis Standardwert je nach Installationslayout

Wenn ein schwerwiegender Fehler auftritt, können Programme unter einigen Betriebssystemen einen CoreDump (Hauptspeicherauszug) in eine Datei schrei

ben

  • Die Direktive gibt das Verzeichnis an, in dem der CoreDump abgelegt werden soll
  • Da die User-ID, unter der Apache ausgeführt wird, in der Regel keine Schreibrechte für die ServerRoot haben sollte, müssen Sie ein anderes Verzeichnis angeben, wenn Sie CoreDumps zu Debugging-Zwecken benötigen

LockFile Pfad der Lock-Datei zur Serialisierung angenommener Anfragen

Modul prefork, worker Kontext Server Syntax LockFile Dateiname Standardwert logs/accept.lock

Wenn für AcceptMutex über eine der beiden Einstellungen flock oder fcntl eine Dateisperre verwendet wird, um die Socket-Zugriffe von Anfragen zu serialisieren, wird eine Datei benötigt, auf der die Sperre errichtet werden kann

  • Die Direktive LockFile legt diese Datei fest
  • Aus Sicherheitsgründen sollte sie sich nicht in einem öffentlich zugänglichen Verzeichnis unterhalb der ServerRoot befinden

MaxClients (seit 2.3.13 MaxRequestWorkers) Höchstzahl von Child-Prozessen, die zur Verarbeitung von Anfragen gestartet werden

Modul beos, prefork, worker, event Kontext Server Syntax MaxClients Anzahl Standardwert je nach MPM verschieden

Diese Direktive legt die maximale Anzahl von Child-Prozessen beziehungsweise Threads fest, die Apache insgesamt zur Annahme von Client-Anfragen startet

  • Sie brauchen den hier festgelegten Wert nur dann zu erhöhen, wenn Sie durch Benchmarks oder Logfile-Auswertung feststellen sollten, dass Ihr Server mit der Anzahl der ankommenden Anfragen nicht zurechtkommt
  • Allerdings müssen Sie in diesem Fall zunächst die Direktive ServerLimit anpassen, um die maximal einstellbare Anzahl von Prozessen oder Threads zu erhöhen
  • Der Vorgabewert ist je nach MPM unterschiedlich
  • prefork: 256 Child-Prozesse
  • worker, event: 16 (ServerLimit) x 25 (ThreadsPerChild)
  • beos: 50 Threads

MaxMemFree Maximale Speichermenge, die die Speicherverwaltung ohne free()-Aufruf verwalten darf

Modul beos, mpm_netware, mpm_winnt, prefork, worker, event Kontext Server Syntax MaxMemFree KBytes Standardwert 0

Mithilfe dieser Direktive können Sie die Arbeitsspeichermenge begrenzen, über die die Hauptspeicher-Zuteilungsroutine des Servers verfügen darf, ohne mittels free() wieder Speicher freizugeben

  • Der Vorgabewert 0 bedeutet, dass keine Beschränkung existiert

MaxRequestsPerChild (seit 2.3.9 MaxConnectionsPerChild) Maximale Anzahl von Anfragen, die ein Child-Prozess nacheinander abarbeitet

Modul mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event Kontext Server Syntax MaxRequestsPerChild Anzahl Standardwert meist 10000 (siehe Beschreibung)

Die Direktive bestimmt indirekt die Lebensdauer eines Worker-Prozesses, der für die Bearbeitung von Client-Anfragen zuständig ist: Nach der Verarbeitung der angegebenen Anzahl von Anfragen (beziehungsweise persistenten Verbindungen) wird der Prozess beendet

  • Dies ermöglicht ein allmähliches Verringern der Prozessanzahl, wenn die Anfragelast nachlässt

Der spezielle Wert 0 bedeutet, dass die Lebensdauer eines Prozesses nicht eingeschränkt wird

  • Bei mpm_winnt und mpm_netware ist dieser Wert aufgrund der Plattformbesonderheiten voreingestellt

MaxSpareThreads Maximale Anzahl von Reserve-Threads

Modul beos, mpm_netware, mpmt_os2, worker, event Kontext Server Syntax MaxSpareThreads Anzahl Standardwert je nach MPM verschieden

Diese Direktive legt bei Thread-basierten MPMs die Höchstzahl von ReserveThreads fest, die für die Verarbeitung einer Verbindung bereitstehen

  • Für die verschiedenen MPMs sind folgende Werte vorgegeben
  • worker, event: 250
  • Hier geht es um die Anzahl der Threads insgesamt
  • Der Wert kann nicht kleiner als MinSpareThreads + ThreadsPerChild sein
  • mpm_netware: 100 (Gesamtzahl)
  • Der Wert muss größer sein als MinSpareThreads
  • beos: 50 (Gesamtzahl)
  • mpmt_os2: 10 (Gesamtzahl)

MinSpareThreads Mindestzahl von Reserve-Threads

Modul beos, mpm_netware, mpmt_os2, worker, event Kontext Server Syntax MinSpareThreads Anzahl Standardwert je nach MPM verschieden

Die Direktive MinSpareThreads bestimmt bei Thread-basierten MPMs die Mindestzahl der Reserve-Threads

  • Wie bei MaxSpareThreads gibt es Unterschiede zwischen den Standardwerten der einzelnen MPM-Module
  • worker, event: Gesamtwert 75
  • mpm_netware: insgesamt 10
  • beos: 1 (Gesamtwert)
  • mpmt_os2: Gesamtwert 5

ScoreBoardFile Pfad der Datei zur Koordination von Child-Prozessen

Modul mpm_common Kontext beos, mpm_winnt, prefork, worker, event Syntax ScoreBoardFile Dateiname Standardwert logs/apache_status

Ein ScoreBoardFile ist eine Datei, die zur Kommunikation zwischen Parent- und Child-Prozessen eingesetzt wird

  • Wenn die Direktive nicht in der Konfigurationsdatei steht, wird anstelle einer Datei ein Shared-Memory-Segment verwendet

Solange Sie kein externes Modul verwenden, das explizit auf das ScoreBoard zugreifen muss, ist dies aus Performance- und Sicherheitsgründen zu bevorzugen

SendBufferSize Größe des TCP-Sendepuffers

Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event Kontext Server Syntax SendBufferSize Bytes Standardwert 0

Die Größe des TCP-Sendepuffers wird auf den angegebenen Wert gesetzt

  • Die Voreinstellung 0 bedeutet, dass der Standardwert des zugrunde liegenden Betriebssystems verwendet werden soll
  • Das ist normalerweise in Ordnung
  • Es sei denn, Sie verwenden ein veraltetes Betriebssystem mit einer sehr schnellen Netzwerkverbindung – dann sollten Sie aus Performance-Gründen manuell einen höheren Wert angeben als die Systemvorgabe

ReceiveBufferSize Größe des TCP-Empfangspuffers

Modul beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker, event Kontext Server Syntax ReceiveBufferSize Bytes Standardwert 0

Diese Direktive stellt analog zu SendBufferSize die Größe des TCP-Empfangspuffers ein

  • Auch hier steht der Standardwert 0 für den Standard des Betriebssystems

ServerLimit Absolute Höchstgrenze für die Anzahl von Prozessen

Modul prefork, worker Kontext Server Syntax ServerLimit Anzahl Standardwert je nach MPM verschieden

Diese Direktive legt den Höchstwert fest, der überhaupt für MaxClients (beziehungsweise NumServers beim MPM perchild) eingestellt werden darf

  • Für die einzelnen MPM-Module hat dies unterschiedliche Auswirkungen
  • prefork: Die Voreinstellung ist 256
  • Wenn Sie für MaxClients – bei diesem MPM die Höchstzahl der Child-Prozesse insgesamt – einen höheren Wert einstellen möchten, müssen Sie zuerst ServerLimit auf diesen Wert setzen
  • worker, event: Der Standardwert ist 16 für die höchste einstellbare Anzahl von Thread-verwaltenden Child-Prozessen
  • Die Gesamtzahl der Worker-Threads ist das Produkt von ServerLimit und ThreadsPerChild
  • Erhöhen Sie im Bedarfsfall einen dieser beiden Werte, wenn Sie insgesamt mehr Threads benötigen

Wie bereits erwähnt, muss Apache komplett beendet und wieder gestartet werden, um diesen Wert anzupassen; ein automatischer Neustart genügt nicht

Wenn Sie einen ungewöhnlich hohen Wert einstellen möchten, müssen Sie configure bei der Kompilierung mit dem Compiler-Flag HARD_SERVER_LIMIT aufrufen

  • Beispiel

./configure ..

  • CFLAGS="-D HARD_SERVER_LIMIT=2048"

StartServers Anzahl von Child-Prozessen, die beim Start erzeugt werden

Modul mpmt_os2, prefork, worker, event Kontext Server Syntax StartServers Anzahl Standardwert je nach MPM verschieden

Über diese Direktive wird festgelegt, wie viele Child-Prozesse beim Start des Servers erzeugt werden

  • Diese Anzahl wird zur Laufzeit gemäß den Angaben in den anderen Direktiven für die Prozessanzahl der Server-Last angepasst
  • Deshalb gibt es in der Regel wenig Veranlassung, die Voreinstellung zu ändern
  • Für die einzelnen MPMs gelten folgende Standardwerte
  • prefork: 5
  • worker: 3
  • mpmt_os2: 2

StartThreads Anzahl von Threads, die beim Start erzeugt werden

Modul beos, mpm_netware Kontext Server Syntax StartThreads Anzahl Standardwert je nach MPM verschieden

Bei den Thread-basierten MPMs beos und mpm_netware übernimmt diese Direktive die Aufgabe von StartServers: Sie bestimmt, wie viele Threads beim Start des Servers erzeugt werden

  • Da Apache bei Bedarf zusätzliche Threads startet, muss auch dieser Wert normalerweise nicht geändert werden
  • Hier die Standardwerte
  • mpm_netware: 50 (Gesamtzahl der gestarteten Threads)
  • beos: 10 (ebenfalls insgesamt)

ThreadLimit Absolute Höchstzahl von Threads

Seit Version 2.0; für mpm_winnt seit 2.0.41 Modul mpm_winnt, worker, event Kontext Server Syntax ThreadLimit Anzahl Standardwert je nach MPM verschieden

Dieser Wert bestimmt die maximale Anzahl von Threads, die für ThreadsPerChild angegeben werden kann

  • Sie sollten die Direktive nur anpassen, wenn Sie den Wert von ThreadsPerChild erhöhen müssen
  • Um kein unnötiges Shared Memory zu vergeuden, sollte ThreadLimit keinen höheren Wert erhalten als den für ThreadsPerChild benötigten

Der Standardwert ist für mpm_winnt 1.920 und für alle anderen MPMs 64

  • Der Quellcode enthält einen fest einprogrammierten Maximalwert von 20.000

(beziehungsweise 15.000 bei mpm_winnt)

Es wurde bereits darauf hingewiesen, dass der Server komplett beendet und wieder gestartet werden muss, um diesen Wert anzupassen

ThreadsPerChild Anzahl der Threads pro Child-Prozess

Modul mpm_winnt, worker, event Kontext Server

Syntax ThreadsPerChild Anzahl Standardwert je nach MPM verschieden

Diese Direktive legt fest, wie viele Threads ein einzelner Verwaltungs-Child-Prozess startet

  • Dies hat je nach MPM unterschiedliche Folgen
  • worker, event: Bei diesen MPM-Modulen existieren mehrere Child-Prozesse

Der Standardwert beträgt 25 und kann erhöht werden, wenn die Gesamtzahl der Worker (Child-Prozesse * Threads) für die Server-Last nicht ausreicht

  • mpm_winnt: Da unter Windows nur ein einziger Child-Prozess zur Verwaltung der Worker-Threads existiert, muss der hier angegebene Wert der maximalen Anzahl gleichzeitiger Anfragen entsprechen, die der Server bewältigen muss

Die Voreinstellung liegt bei 64, und es ist wahrscheinlich, dass Sie sie für einen Produktionsserver erhöhen müssen

MaxSpareServers Maximale Anzahl von Reserve-Child-Prozessen

Modul mpm_prefork Kontext Server Syntax MaxSpareServers Anzahl Standardwert 10

Diese Direktive bestimmt, wie viele unbeschäftigte Prozesse maximal als Reserve auf Anfragen warten sollen

  • Sollte die Anzahl über den hier eingestellten Wert hinausgehen, werden die überschüssigen Prozesse beendet

Sie brauchen nur bei sehr stark beanspruchten Servern einen höheren Wert als voreingestellt

  • Wenn Sie einen Wert verwenden, der kleiner als MinSpareServers ist, wird er auf MinSpareServers +1 gesetzt

MinSpareServers Mindestzahl von Reserve-Child-Prozessen

Modul mpm_prefork Kontext Server Syntax MinSpareServers Anzahl Standardwert 5

Mithilfe von MinSpareServers können Sie festlegen, wie viele unbeschäftigte Child-Prozesse mindestens als Reserve auf Client-Anfragen warten sollen

  • Wenn

weniger Prozesse frei sind als hier eingestellt, erzeugt Apache neue, und zwar höchstens einen pro Sekunde

  • In der Regel muss der Wert nicht geändert werden

Nur bei besonders belasteten Sites müssen Sie ihn möglicherweise erhöhen

MaxRequestsPerThread Maximale Anzahl von Anfragen, die ein Thread nacheinander abarbeitet

Version 2.0 und 2.2 (nur BeOS) Modul mpm_beos Kontext Server Syntax MaxRequestsPerThread Anzahl Standardwert 0

Diese Direktive bestimmt unter BeOS indirekt die Lebensdauer eines Threads und ähnelt damit der für Prozesse zuständigen Einstellung MaxRequestsPerChild Sie legt fest, wie viele Anfragen beziehungsweise persistente Verbindungen ein Thread verarbeitet, bevor er beendet wird

  • Wenn Sie die Voreinstellung 0 (unbegrenzte Lebensdauer) ändern, kann der Server schneller auf eine Verringerung der Anfragelast reagieren und so Ressourcen freigeben

MaxThreads Maximale Anzahl von Worker-Threads

Seit Version 2.0 (nur NetWare) Modul mpm_netware Kontext Server Syntax MaxThreads Anzahl Standardwert 2.048

Diese Direktive ist nur unter Novell NetWare verfügbar

  • Sie bestimmt die maximale Anzahl von Threads, die Anfragen beantworten, und ähnelt so der für andere MPMs definierten Direktive ThreadsPerChild
  • Da der Standardwert dem einkompilierten Maximum entspricht, können Sie den Wert lediglich verringern

ThreadStackSize Größe des Stacks pro Thread

Seit Version 2.0 (nur NetWare) Modul mpm_netware Kontext Server

Syntax ThreadStackSize Anzahl Standardwert 65.536

Mit dieser Direktive wird die maximale Größe des Stacks für einen einzelnen Thread festgelegt

  • Sie muss nur erhöht werden, falls ein Stack-Overflow auftreten sollte

Win32DisableAcceptEx AcceptEx() deaktivieren, falls inkompatibel

Seit Version 2.0.49 bis 2.2.x Modul mpm_winnt Kontext Server Syntax Win32DisableAcceptEx Standardwert nicht gesetzt

Unter Windows wird standardmäßig die Winsock2-Funktion AcceptEx() verwendet, die gegenüber dem klassischen BSD-Systemaufruf accept() einen Performance-Gewinn liefert

  • Dies kann allerdings zur Inkompatibilität mit einigen anderen Programmen führen, z.B
  • mit VPN-Software oder Antivirus-Programmen
  • Ein solches Problem kann sich in einer Fehlermeldung wie dieser äußern

[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed

  • Attempting to recover

Wenn Sie diese Direktive (ohne Wert) in Ihre Konfigurationsdatei setzen, wird AcceptEx() deaktiviert

  • Sie sollten sie also verwenden, falls das geschilderte Problem bei Ihnen auftritt
  • Ab Apache 2.3 wird AcceptFilter für die entsprechenden Einstellungen verwendet

Hauptserver

Der zweite Abschnitt der Konfigurationsdatei httpd.conf ist wie erwähnt für die Einstellungen der Standard-Website zuständig, die der Server veröffentlicht

  • Hier befinden sich also beispielsweise die DocumentRoot (das Basisverzeichnis) der Site sowie sämtliche Zugriffs- und Authentifizierungseinstellungen
  • In der offiziellen Vorlage der httpd.conf hieß es früher über diesen Abschnitt
      1. Section 2: 'Main' server configuration
  1. The directives in this section set up the values used by the
  2. 'main' server, which responds to any requests that aren't
  1. handled by a <VirtualHost> definition
  • These values also
  1. provide defaults for any <VirtualHost> containers you may
  2. define later in the file

Der »Hauptserver« behandelt nach dieser Beschreibung sämtliche Anfragen, für die kein spezieller virtueller Host konfiguriert ist

  • Außerdem werden alle hier vorgenommenen Grundeinstellungen zunächst von jedem virtuellen Host übernommen, sofern sie in dessen Konfiguration nicht überschrieben werden
  • Umgekehrt gilt natürlich, dass viele der hier vorgestellten Direktiven für einzelne virtuelle Hosts überschrieben werden können und oft sogar sollten

ServerAdmin E-Mail-Adresse des Server-Administrators für automatisch generierte Fehlermeldungsseiten

Modul core Kontext Server, <VirtualHost> Syntax ServerAdmin E-Mail-Adresse Standardwert nicht gesetzt

Wenn Apache bei der Beantwortung von Anfragen auf Probleme stößt, erzeugt er angepasste Fehlermeldungsseiten (festgelegt durch die Direktive ErrorDocument) Auf Wunsch kann eine solche Seite einen Link auf Ihre E-Mail-Adresse enthalten, damit Benutzer der Website Ihnen Probleme mitteilen können

  • Die Direktive ServerAdmin legt diese Adresse fest
  • Beispiel

ServerAdmin webmaster@mynet.de

ServerName Hostname und TCP-Port des Servers

Seit Version 2.0 (früher Port) Modul core Kontext Server, <VirtualHost> Syntax ServerName voll.qualifizierter.domain.name [:Port] Standardwert nicht gesetzt

Mithilfe dieser Direktive wird der Domain-Name des Servers angegeben, optional gefolgt von einer TCP-Portnummer

  • Die Konfigurationsanweisung bestimmt nicht etwa, wie Listen, auf welche Anfragen Apache überhaupt reagiert
  • Sie legt den Server-Namen auch nicht nach außen fest – das funktioniert im Internet nur

über DNS

  • Der hier angegebene Name dient vielmehr der Selbstidentifikation des Servers
  • Ob er auch für selbst referenzierte URLs benutzt wird, regelt die Direktive UseCanonicalName

Es ist auf jeden Fall wichtig, dass der festgelegte Name auf irgendeine Weise in eine IP-Adresse aufgelöst werden kann: bei einem öffentlich zugänglichen Produktionsserver natürlich über DNS; bei einem neu eingerichteten Server, den Sie testen möchten, können Sie den Namen dagegen in Ihre hosts-Datei eintragen (siehe Kapitel 5, »Apache in Betrieb nehmen«)

  • Hier ein Beispiel

ServerName www.mynet.de:80

UseCanonicalName Legt fest, woher der Server seinen eigenen Hostnamen für selbst referenzierte URLs erhält

Modul core Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files> Syntax UseCanonicalName On|Off|DNS Standardwert Off (bis 2.0 On)

Bei Weiterleitungen, automatisch generierten Fehlermeldungsseiten und ähnlichen Gelegenheiten muss Apache selbst referenzierte URLs erzeugen, also absolute URLs, die wieder auf den Server-Host selbst zeigen

  • Diese Direktive bestimmt, wie der Host- beziehungsweise Domain-Name für diese URLs bestimmt wird
  • Es gibt drei mögliche Werte
  • On: Apache verwendet den Hostnamen und den Port, der mithilfe der Direktive ServerName festgelegt wurde
  • Off: Es werden der Hostname und der Port benutzt, die der Client in der Anfrage übermittelt hat
  • DNS: Der Hostname wird durch einen Reverse-DNS-Lookup ermittelt, das heißt, er erfragt über das Domain Name System den Hostnamen zur IPAdresse

In der Regel ist die Einstellung On in Ordnung

  • Der Default-Wert wurde in Version 2.2 jedoch umgestellt, da On manchmal Probleme mit schlecht geschriebenen CGI-Skripten oder Webanwendungen bereitet, die für selbst referenzierte URLs nicht die Umgebungsvariable SERVER_NAME verwenden
  • Darüber hinaus kann Off nützlich sein, wenn die Clients im Intranet über einen anderen Hostnamen auf den Server zugreifen als diejenigen im Internet (z.B
  • www statt www.mynet.de), da die Intranet-Clients bei Weiterleitungen und ähnlichen Vor

gängen sonst auf den externen Domain-Namen www.mynet.de umgeleitet würden

  • DNS sorgt für Kompatibilität mit HTTP/1.0-Clients, die keinen Host-Header senden, und sollte eigentlich nur beim Einsatz IP-basierter virtueller Hosts verwendet werden, zumal der Reverse Lookup für Performance-Nachteile sorgt

UseCanonicalPhysicalPort Legt fest, woher der Server die Portnummer für selbst referenzierte URLs erhält

Seit Version 2.2 Modul core Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files> Syntax UseCanonicalPhysicalPort On|Off Standardwert Off

Wenn Sie diese Direktive auf On setzen, wird bei der Erzeugung selbst referenzierter URLs der tatsächliche, physische TCP-Port der Anfrage gewürdigt

  • Die genaue Reihenfolge zur Ermittlung des Ports hängt auch von der Einstellung der Direktive UseCanonicalName ab
  • Hat diese den Wert On, dann versucht Apache, den Port in folgender Reihenfolge zu bestimmen

1

  • Port aus dem Wert von ServerName

2

  • Physischer Port

3

  • Standardport

Hat UseCanonicalName dagegen einen der Werte Off oder DNS, wird folgende Reihenfolge verwendet

1

  • Port aus dem Host-Header

2

  • Physischer Port

3

  • Port aus dem Wert von ServerName

4

  • Standardport

Bei UseCanonicalPhysicalPort Off wird der physische Port nicht berücksichtigt; ansonsten bleibt die Reihenfolge je nach Einstellung für UseCanonicalName gleich

ServerTokens Ausführlichkeit der Versionsangabe für den HTTP-Antwort-Header Server

Modul core Kontext Server

Syntax ServerTokens Major | Minor | Min[imal] | Prod[uctOnly] | OS | Full Standardwert Full

Diese Direktive legt fest, wie ausführlich der Apache-Webserver seine Versionsinformationen im HTTP-Antwort-Header Server und in der durch ServerSignature definierten Fußzeile automatisch generierter Dokumente angibt

  • Folgende Werte sind dafür definiert
  • Prod oder ProductOnly: Es wird nur der Programmname ausgegeben: Apache
  • Major: Die Hauptversionsnummer wird angegeben, z.B
  • Apache/2
  • Minor: Haupt- und Unterversionsnummer werden kombiniert, z.B
  • Apache/2.2
  • Min oder Minimal
  • Es werden Hauptversions-, Unterversions- und Releasenummer angegeben
  • Beispiel: Apache/2.2.10
  • OS: Die vollständige Versionsnummer wie bei Minimal wird angegeben, zusätzlich steht in Klammern die Systemplattform
  • Beispiel

Apache/2.2.21 (UNIX)

  • Full: Zusätzlich zur vollen Versionsnummer und zum Betriebssystem werden die Versionsdaten wichtiger Zusatzmodule angezeigt
  • Beispiel

Apache/2.2.21 (UNIX) mod_perl/2.0.4 Perl/v5.10.0 PHP/5.3.8

In den meisten Fällen sollten Sie sich für Minimal oder OS entscheiden

  • Full verrät womöglich zu viele Details über die Server-Konfiguration

Falls Sie sich allerdings Hoffnungen machen, durch die Veröffentlichung von weniger Informationen (im Extremfall ProductOnly) Angriffe auf Ihren Webserver abzuwehren, handelt es sich um einen Fall von »Security by Obscurity«: Durch Verschleierung der Softwareinfrastruktur soll Crackern die Arbeit erschwert werden

  • Dies beeindruckt allerdings höchstens ein paar automatisierte Angriffs-Tools, die von Anfängern verwendet werden

Aus diesem Grund wird auch keine Direktive angeboten, die eine grundlegende Änderung der Server-Informationen ermöglicht

  • Wenn Sie möchten, dass Ihr Server sich unter falschem Namen meldet, müssen Sie die entsprechenden Daten vor der Kompilierung im Quellcode ändern
  • Die Definitionen befinden sich am Ende der Datei ap_release.h im Verzeichnis include der Source-Distribution und lauten in der aktuellen Version folgendermaßen
  1. define AP_SERVER_BASEVENDOR "Apache Software Foundation"
  2. define AP_SERVER_BASEPRODUCT "Apache"
  3. define AP_SERVER_MAJORVERSION "2"
  4. define AP_SERVER_MINORVERSION "2"
  5. define AP_SERVER_PATCHLEVEL "9"

Die Werte lassen sich natürlich beliebig ändern

  • Beispiel
  1. define AP_SERVER_BASEVENDOR "Sirius Cybernetics Corp."
  2. define AP_SERVER_BASEPRODUCT "The Hitchhiker's Web Server"
  3. define AP_SERVER_MAJORVERSION "3"
  4. define AP_SERVER_MINORVERSION "1"
  5. define AP_SERVER_PATCHLEVEL "42"

Wenn Sie Apache anschließend gemäß den Anweisungen aus Kapitel 4, »Apache kompilieren und installieren«, kompilieren, meldet er sich als The Hitchhiker's Web Server/3.1.42

ServerSignature Fußzeile automatisch generierter Server-Dokumente

Modul core Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (All) Syntax ServerSignature On|Off|Email Standardwert Off

Diese Direktive legt fest, ob Apache in automatisch generierte Dokumente wie Index- oder Fehlermeldungsseiten eine Fußzeile einfügen soll, die Informationen über die Server-Software, den Hostnamen und eventuell die E-Mail-Adresse des Administrators enthält

  • Es gibt drei mögliche Werte
  • Off: Apache erzeugt keine Informationsfußzeile
  • On: Es wird eine Fußzeile ohne E-Mail-Adresse generiert
  • Beispiel

Apache/2.2.10 (UNIX) Server at www.mynet.de Port 80

  • EMail: Die Fußzeile sieht genauso aus wie bei On, allerdings ist der Hostname gleichzeitig ein Hyperlink auf die unter ServerAdmin angegebene E-MailAdresse

Der Hostname wird gemäß der Direktive UseCanonicalName angegeben

  • Seit Apache 2.0.44 bestimmt ServerTokens, wie ausführlich die Information über den Server ausfällt

DocumentRoot Stammverzeichnis der Website

Modul core Kontext Server, <VirtualHost>

Syntax DocumentRoot Verzeichnis Standardwert variiert je nach Layout

Dies ist die wichtigste Konfigurationsanweisung für die Website des Hauptservers oder eines virtuellen Hosts: Sie legt das Basisverzeichnis fest, aus dem Apache die angeforderten Dokumente ausliefert

  • Das bedeutet, dass Pfadangaben aus der URL der Client-Anfrage an dieses Verzeichnis angehängt werden, um die gewünschte Ressource zu ermitteln
  • Angenommen, Sie haben DocumentRoot auf

/usr/local/share/apache2/htdocs gesetzt (Standard beim GNU-Installationslayout; siehe Kapitel 4, »Apache kompilieren und installieren«)

  • Wenn ein Client nun beispielsweise die URL http://www.mynet.de/info/news.html anfordert, liefert der Server die Datei /usr/local/share/apache2/htdocs/info/news.html aus – oder eine Fehlermeldung, falls das Dokument an der angegebenen Stelle nicht existiert

Beispiel

DocumentRoot /usr/share/web

Mithilfe von Direktiven wie Alias oder UserDir (siehe Kapitel 8, »Weiterleitungen und Indizes«) können Sie übrigens auch solche Dateien und Verzeichnisse im Bereich der Website abbilden, die sich eigentlich außerhalb der DocumentRoot befinden

DirectoryIndex Name der Indexseite

Modul mod_dir Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (Indexes) Syntax DirectoryIndex lokale_URL [lokale_URL ...] Standardwert index.html

Dies ist eine der beiden Direktiven, die das Standardmodul mod_dir zur Verfügung stellt

  • Sie definiert die Namen von Dokumenten, die Apache automatisch ausliefert, wenn anstelle einer Datei ein Verzeichnis angefordert wurde
  • Dies ist erforderlich, damit Benutzer einfach eine Website wie http://www.mynet.de/

anfordern können, anstatt den Namen der gewünschten Datei selbst anzugeben Wenn Sie hier mehrere Dateien angeben, sucht Apache in der angegebenen Reihenfolge nach ihnen und liefert die erste aus, die er findet

  • Beispiel

DirectoryIndex index.html index.html.var index.php

Ist eine Datei mit dem Namen index.html vorhanden, dann wird diese an den Client geliefert

  • Bei der Angabe index.html.var handelt es sich um eine TypeMap

(siehe Kapitel 7, »Header und MIME-Einstellungen«) – je nach Sprach- oder Zeichensatzpräferenz des Clients können auf diese Weise unterschiedliche Dateien serviert werden

  • Der Eintrag index.php ist interessant, wenn Sie mit PHP (siehe Kapitel 15, »Technologien zur Webprogrammierung«) arbeiten – auf diese Weise können auch PHP-Skripte als Indexdateien dienen

Selbstverständlich braucht der Name vor der Dateiendung nicht unbedingt index zu lauten – wenn Sie z.B

  • von Microsoft Internet Information Services auf Apache umgestiegen sind, möchten Sie vielleicht lieber den bei Microsoft üblichen Dateinamen default.html weiterverwenden, um Ihre alte Website mit möglichst wenigen Änderungen zu übernehmen

Übrigens können Sie in der Liste auch einen absoluten URL-Pfad angeben

  • Dieser sollte natürlich den letzten Eintrag bilden, damit die entsprechende Datei immer dann ausgeliefert wird, wenn das aktuelle Verzeichnis keine eigene Indexdatei enthält
  • Das folgende Beispiel weist Apache an, die Datei index.html im angeforderten Verzeichnis an die Clients zu liefern oder aber die Datei defaultindex.html in der DocumentRoot, falls index.html nicht existiert

DirectoryIndex index.html /defaultindex.html

Auf Wunsch kann Apache auch automatisch einen Verzeichnisindex generieren – diese Funktion wird vom Modul mod_autoindex bereitgestellt, das in Kapitel 8, »Weiterleitungen und Indizes«, ausführlich beschrieben wird

mod_dir und Verzeichnisanfragen

  • Neben der Definition der Indexseite hat das Modul mod_dir übrigens auch noch die wichtige Aufgabe, Anfragen umzuleiten, die ein Verzeichnis betreffen
  • Wenn eine Anfrage mit einer URL ohne abschließenden Slash eintrifft, behandelt Apache diese normalerweise nicht als Anforderung eines Verzeichnisses
  • Angenommen, ein Client fordert die Ressource /test an
  • Der Server sucht daraufhin in der DocumentRoot nach einer Datei mit diesem Namen
  • Falls aber keine Datei, sondern nur ein Verzeichnis mit diesem Namen vorhanden ist, geht es unterschiedlich weiter: Wenn mod_dir nicht aktiv ist, erhält der Client einfach die Fehlermeldung »404 Not Found«
  • Ist mod_dir dagegen geladen, wird eine Weiterleitung (301 Moved Permanently) gesendet, die einen Location-Header mit der kompletten URL einschließlich des Slashs enthält, in diesem Fall also z.B

http:// www.mynet.de/test/ (der Hostname wird gemäß der bereits beschriebenen Direktive UseCanonicalName gebildet)

  • So gut wie alle Browser folgen dieser Weiterleitung automatisch

Wenn ein Client ein Verzeichnis mit abschließendem Slash anfordert, beispielsweise /test/, wird natürlich sofort dessen Index geliefert

DirectorySlash Weiterleitung bei fehlendem Abschluss-Slash ein-/ausschalten

Seit Version 2.0.51 Modul mod_dir Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (Indexes) Syntax DirectorySlash On|Off Standardwert On

Diese Direktive erlaubt es Ihnen in Ausnahmefällen, die unter »mod_dir und Verzeichnisanfragen« soeben beschriebene Weiterleitung bei fehlendem Slash zu deaktivieren

  • Dazu müssen Sie im entsprechenden Kontext folgende Direktive setzen

DirectorySlash Off

Da die URL ohne abschließenden Slash nun nicht mehr auf Inhalte verweist, könnte es sinnvoll sein, für diesen Kontext einen speziellen Handler zu setzen, der sich um die Beantwortung solcher Anfragen kümmert (siehe Kapitel 7, »Header und MIME-Einstellungen«)

AccessFileName Name der ausgelagerten Verzeichniskonfigurationsdatei

Modul core Kontext Server, <VirtualHost> Syntax AccessFileName Dateiname Standardwert .htaccess

Mithilfe dieser Direktive können Sie den Namen einer Datei angeben, die innerhalb eines Verzeichnisses der DocumentRoot zum Überschreiben von Konfigurationsdirektiven dient

  • Standardmäßig ist der Name dieser Datei .htaccess, und es gibt im Allgemeinen keinen Grund, dies zu ändern.3 Erlaubt ist jeder beliebige Dateiname – er sollte aber zumindest mit einem Punkt beginnen, um wenigstens einen geringfügigen Schutz zu gewährleisten
  • Beispiel

AccessFileName .override

3 Wieder einmal ein Fall von »Security by Obscurity«, der allenfalls vor Skript-Kiddies schützt

Vergessen Sie nicht, die Auslieferung von Dateien mit dem gewählten Namen an Clients generell zu deaktivieren

<Files .override> Order Deny,Allow Deny from all </Files>

Verzeichniseinstellungen

Wichtige Verzeichniseinstellungen Auch die Konfigurationsanweisungen, die in diesem Abschnitt besprochen werden, gehören zur zweiten Abteilung der Datei httpd.conf
  • Der Unterschied besteht darin, dass sie üblicherweise innerhalb von <Directory>-Containern stehen, um die Einstellungen für die DocumentRoot und ihre Unterverzeichnisse sowie für einige andere Verzeichnisse festzulegen

Hier werden zunächst alle entsprechenden Direktiven behandelt; im Anschluss daran finden Sie einige Beispiele für übliche Verzeichniskonfigurationen

Options Verzeichnisoptionen
Modul core
Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (Options)
Syntax Options All|[+|-]Option [[+|-]Option ...]
Standardwert All

Die Direktive Options legt fest, welche besonderen Eigenschaften ein bestimmtes Verzeichnis (mitsamt seinen Unterverzeichnissen) besitzen soll

  • Das nähere Verhalten einiger dieser Optionen wird durch andere Direktiven geregelt; hier geht es zunächst einmal darum, ob eine bestimmte Eigenschaft grundsätzlich unterstützt werden soll oder nicht
  • Im Einzelnen sind folgende Optionen definiert, die Sie als Werte der Direktive angeben können
  • None: Schaltet sämtliche Optionen ab
  • Indexes: Wenn die angeforderte URL ein Verzeichnis ist, wird die mittels DirectoryIndex festgelegte Indexdatei ausgeliefert oder – falls diese nicht vorhanden ist – ein durch mod_autoindex generierter Index
  • FollowSymLinks: Symbolische Links innerhalb des Verzeichnisses werden aufgelöst – Apache liefert das entsprechende Ziel des Links aus
  • SymLinksIfOwnerMatch: Symbolische Links werden nur dann verfolgt, wenn der Eigentümer des SymLinks demjenigen der Zieldatei entspricht
  • ExecCGI: Innerhalb des Verzeichnisses soll die Ausführung von CGI-Skripten gestattet sein: Dateien mit bestimmten Endungen oder MIME-Types werden von Apache als ausführbare Skripte betrachtet; ihre Ausgabe wird als dynamisch erzeugtes Dokument an den Client ausgeliefert
  • Es ist erheblich sicherer, über die Direktive ScriptAlias separate CGI-Verzeichnisse einzurichten und diese Option für Verzeichnisse innerhalb der DocumentRoot zu deaktivieren
  • Näheres zur CGI-Konfiguration erfahren Sie in Kapitel 14, »CGI«
  • Includes: Server Side Includes (siehe Kapitel 16, »SSI und Filter«) sind in diesem Verzeichnis gestattet
  • IncludesNOEXEC: Auch in einem Verzeichnis mit dieser Option sind SSI grundsätzlich erlaubt, allerdings mit Ausnahme von #exec (Programmausführung)

und #exec cgi (CGI-Ausführung)

  • MultiViews: Aktiviert die Auslieferung alternativer Dokumente für unterschiedliche Sprach-, Zeichensatz- oder Dateityp-Präferenzen eines Clients durch mod_negotiation
  • Näheres dazu finden Sie in Kapitel 7, »Header und MIME-Einstellungen«
  • All: Alle genannten Optionen außer MultiViews
  • Wenn Options für ein Verzeichnis nicht angegeben wird, ist dies der Standardwert

Wenn Sie Optionen für mehrere ineinander verschachtelte Verzeichnisse festlegen, gelten für ein gegebenes Verzeichnis jeweils die speziellsten (für das am weitesten untergeordnete Verzeichnis angegebenen) Werte

  • Näheres zur Reihenfolge der Abarbeitung unterschiedlicher Container erfahren Sie in Abschnitt 6.2, »Kontexte und Container«
  • Das folgende Beispiel illustriert ein Missverständnis, das in diesem Zusammenhang auftreten kann

<Directory /usr/share/web> Options FollowSymLinks Indexes IncludesNOEXEC

  1. ..
  • weitere Einstellungen für /usr/share/web

</Directory>

<Directory /usr/share/web/test> Options Includes

  1. ..
  • weitere Einstellungen für /usr/share/web/test

</Directory>

Im Verzeichnis /usr/share/web sind die Optionen FollowSymLinks, Indexes und IncludesNOEXEC aktiviert

  • Im Unterverzeichnis /usr/share/web/test gilt dagegen nur die Option Includes – das ist wahrscheinlich nicht das gewünschte Verhal

ten

  • Um Includes hinzuzufügen, anstatt die anderen Optionen durch Includes zu ersetzen, müssten Sie für /usr/share/web/test diese Variante angeben

<Directory /usr/share/web/test> Options FollowSymLinks Indexes Includes

  1. ..
  • weitere Einstellungen für /usr/share/web/test

</Directory>

Natürlich können Sie die im übergeordneten Verzeichnis gesetzte Option IncludesNOEXEC hier zufälligerweise weglassen, da Includes deren Fähigkeiten enthält (und ausweitet)

Speziell für untergeordnete Verzeichnisse wird die spezielle Schreibweise +Option beziehungsweise -Option definiert: Damit lässt sich eine einzelne Option zu den bereits im übergeordneten Kontext gesetzten Optionen hinzufügen beziehungsweise hiervon entfernen

  • Mithilfe dieser Möglichkeit lässt sich das gerade zitierte Beispiel einfacher schreiben

<Directory /usr/share/web> Options FollowSymLinks Indexes IncludesNOEXEC

  1. ..
  • weitere Einstellungen für /usr/share/web

</Directory>

<Directory /usr/share/web/test> Options +Includes

  1. ..
  • weitere Einstellungen für /usr/share/web/test

</Directory>

AllowOverride Festlegung der lokal überschreibbaren Konfigurationsdirektiven

Modul core Kontext <Directory> Syntax AllowOverride All|None|Direktiventyp [Direktiventyp ...] Standardwert All

Diese Direktive legt fest, welche Arten von Konfigurationsdirektiven in .htaccessDateien überschrieben werden dürfen

  • Da diese Dateien nur in Verzeichnissen innerhalb der DocumentRoot erlaubt sind, ist auch AllowOverride nur in

<Directory>-Abschnitten gültig

Es ist nicht möglich, die in .htaccess-Dateien gestatteten Direktiven einzeln anzugeben

  • Stattdessen definiert AllowOverride zahlreiche Gruppenbezeichnungen, die jeweils Konfigurationsanweisungen mit bestimmten Aufgaben zusammenfas

sen

  • Damit Sie genau wissen, welche das jeweils sind, finden Sie in diesem Buch bei der Übersicht jeder einzelnen Direktive, die den Kontext .htaccess besitzt, in Klammern den Wert, den AllowOverride beinhalten muss, um diese Direktive in einer .htaccess-Datei zuzulassen

Hier die einzelnen Werte, die Sie mit Ausnahme von All und None beliebig mischen können

  • None: Im angegebenen Verzeichnis und in allen Unterverzeichnissen ohne anderweitige Einstellung akzeptiert Apache gar keine .htaccess-Dateien
  • FileInfo: Ermöglicht das Überschreiben der Direktiven, die sich um Dateitypen und -inhalte kümmern
  • Indexes: Gestattet das Überschreiben von Direktiven zur automatischen Erzeugung von Verzeichnisindizes (meist in mod_autoindex definiert)
  • Limit: Diese Option erlaubt das Überschreiben der Direktiven Order, Allow und Deny zur hostbasierten Zugriffskontrolle
  • AuthConfig: Wenn dieser Wert angegeben wird, dürfen alle Direktiven zur Authentifizierung überschrieben werden (siehe Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)
  • Options: Ermöglicht das Überschreiben der bereits besprochenen Direktive Options und anderer Verzeichnisoptions-Direktiven
  • All: Diese Einstellung gestattet die Verwendung aller bereits genannten Einzelgruppen sowie einiger zusätzlicher Direktiven

Hier ein Beispiel

<Directory /usr/local/share/apache2/htdocs> AllowOverride FileInfo Limit AuthConfig

  1. ..
  • weitere Einstellungen für die DocumentRoot

</Directory>

Näheres zu .htaccess-Dateien finden Sie in Abschnitt 6.2, »Kontexte und Container«

Order Reihenfolge, in der Allow- und Deny-Direktiven beachtet werden

Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access Kontext <Directory>, <Location>, <Files>, .htaccess (Limit) Syntax Order Deny,Allow | Allow,Deny | Mutual-failure Standardwert Deny,Allow

Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, besprochene Direktive Require ersetzt

  • Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul mod_access_compat unterstützt, dürfte aber mittelfristig ganz abgeschafft werden

Bis Version 2.2 ist diese Direktive allerdings äußerst wichtig

  • Order legt die Reihenfolge fest, in der die Regeln aus den Konfigurationsanweisungen Allow und Deny angewendet werden, die wiederum bestimmen, welche Hosts auf die entsprechende Ressource zugreifen dürfen
  • Deny,Allow: Diese Reihenfolge ist die Voreinstellung
  • Sie besagt, dass zuerst die Deny-Liste und dann die Allow-Liste ausgewertet werden
  • Das bedeutet in der Praxis, dass die Regeln nach folgendem Schema ausgewertet werden: »Der Zugriff ist den angegebenen Hosts verboten mit den folgenden Ausnahmen

…« Die sinnvolle Verwendung setzt natürlich voraus, dass für Deny eine allgemeinere Angabe gemacht wird (vorzugsweise Deny from all) als für Allow Wenn Sie keine weiteren Direktiven verwenden, ist der Standard bei dieser Einstellung Allow from all – alle Hosts dürfen zugreifen

  • Allow,Deny: Dies ist die umgekehrte Reihenfolge, die dafür sorgt, dass die Allow-Liste vor der Deny-Liste ausgewertet wird
  • Mit anderen Worten: Der Zugriff wird zunächst den angegebenen (üblicherweise allen) Hosts gestattet, bevor er einer kleineren Anzahl verboten wird
  • Das Standardverhalten ist in diesem Fall Deny from all, das heißt, alle müssen zunächst draußen bleiben
  • Mutual-failure: veraltetes Synonym für Allow,Deny

Bitte beachten Sie, dass zwischen den Aufzählungen Deny,Allow und Allow,Deny kein Leerzeichen nach dem Komma stehen darf

Allow Bestimmt, welche Hosts auf einen Site-Bereich zugreifen dürfen

Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access Kontext <Directory>, <Location>, <Files>, .htaccess (Limit) Syntax Allow from all | Host | env=Umgebungsvariable [Host | env=Umgebungsvariable ...] Standardwert nicht gesetzt

Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, ersetzt

  • Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul mod_access_compat unterstützt, dürfte aber mittelfristig ganz abgeschafft werden

Bis Apache 2.2 legt die Direktive Allow fest, wer auf eine bestimmte Ressource des Servers zugreifen darf

  • Die Werte können eines der folgenden Formate annehmen
  • All Grundsätzlich darf jeder Host auf die Inhalte des Kontextes zugreifen, in dem die Direktive definiert ist
  • Die entsprechende Apache-2.4-Schreibweise lautet

Require all granted

  • Domain-Name Bezeichnet Hosts, deren Name der angegebenen Domain und ihren Subdomains entspricht
  • Apache führt zur Ermittlung des Hostnamens eines zugreifenden Rechners zunächst einen Reverse-DNS-Lookup durch, um den zur IPAdresse gehörenden Hostnamen zu ermitteln
  • Anschließend wird zur Sicherheit noch einmal ein Forward-Lookup ausgeführt, um sicherzugehen, dass der Hostname wiederum der IP-Adresse entspricht
  • Die DNS-Lookups finden in diesem Fall auch dann statt, wenn HostNameLookups (siehe Kapitel 11, »Logging«) deaktiviert ist

Betrachten Sie das folgende Beispiel

Allow from office.mynet.de

Client-Rechner aus den Subdomains office.mynet.de und billing.office.mynet.de dürfen zugreifen, während Clients aus der Domain sales.mynet.de der Zugriff verweigert wird Die 2.4-Variante ist

Require host office.mynet.de

  • Vollständige IP-Adresse Ein solcher Wert gibt die IP-Adresse eines einzelnen Hosts an, der auf den Server zugreifen darf
  • Beispiel

Allow from 196.17.8.3

Schreiben Sie für Apache 2.4 stattdessen

Require ip 196.17.8.3

Wenn Sie in einem Bereich Ihrer Website (oder auf dem ganzen Server) zu Testzwecken nur Zugriffe durch den lokalen Rechner selbst gestatten möchten, müssen Sie im entsprechenden Kontext folgende Direktivenfolge verwenden

Order Deny,Allow Deny from all Allow from 127.0.0.1

In 2.4 funktioniert es folgendermaßen

Require ip 127.0.0.1

  • Unvollständige IP-Adresse Wenn Sie Zugriffe auf ein bestimmtes IP-Teilnetz beschränken möchten, genügt es oft, den gemeinsamen Netzwerkteil der entsprechenden IP-Adressen anzugeben
  • Das folgende Beispiel erlaubt Zugriffe aus dem Netz 196.17.8.0/24

Allow from 196.17.8

Apache 2.4

Require ip 196.17.8

  • CIDR-Adresse Sie können ein Teilnetz auch nach der CIDR-Logik angeben (siehe Kapitel 1, »TCP/IP-Netzwerke, Internet und WWW«)
  • Wenn die Grenze zwischen Netzwerk- und Hostteil im gewünschten IP-Teilnetz nicht genau an einer ByteGrenze liegt, ist dies sogar erforderlich
  • Dieses Beispiel gestattet Zugriffe aus dem Teilnetz 160.76.32.0/19 (Adressbereich 160.76.32.0 bis 160.76.63.255)

Allow from 160.76.32.0/19

Version 2.4

Require ip 160.76.32.0/19

  • IP-Adresse/Teilnetzmaske Dies ist eine alternative Schreibweise für CIDR-Adressen
  • Beispielsweise können Sie das Netzwerk 160.76.32.0/19 auch folgendermaßen angeben

Allow from 160.76.32.0/255.255.224.0

Ab 2.3-beta

Require ip 160.76.32.0/255.255.224.0

  • env=Umgebungsvariable Diese spezielle Form erlaubt Zugriffe nur dann, wenn die angegebene Umgebungsvariable gesetzt ist
  • Sinnvoll ist dieses Verfahren im Zusammenhang mit der Direktive SetEnvIf (siehe Kapitel 14, »CGI«)
  • Diese setzt eine Variable, wenn die Client-Anfrage eine bestimmte Bedingung erfüllt
  • Das folgende Beispiel erlaubt den Zugriff nur, wenn das Referer-Feld der Client-Anfrage mit

http://www.mynet.de beginnt, das heißt, wenn die aktuelle Anfrage durch einen Hyperlink von der eigenen Website aus zustande kam

SetEnvIf Referer "^http://www.mynet.de" locallink Order Deny,Allow Deny from all Allow from env=locallink

Dies ist eine mögliche Methode, um Gefahren durch Cross-Site-Scripting zu verringern Ab Version 2.3 kann folgende Variante verwendet werden

SetEnvIf Referer "^http://www.mynet.de" locallink Require env locallink

Oder sogar noch kürzer

Require expr "%{HTTP_REFERER} =~ m#^http://www.mynet.de"

Deny Legt fest, welche Hosts nicht auf einen Site-Bereich zugreifen dürfen

Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access Kontext <Directory>, <Location>, <Files>, .htaccess (Limit) Syntax Deny from all | Host | env=Umgebungsvariable [Host | env=Umgebungsvariable ...] Standardwert nicht gesetzt

Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, ersetzt

  • Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul mod_access_compat unterstützt, dürfte aber mittelfristig ganz abgeschafft werden

Die Syntax von Deny ist mit Allow identisch

  • Die Direktive bestimmt, welche Hosts vom Zugriff auf eine Server-Ressource ausgeschlossen sind
  • In welcher Reihenfolge Allow und Deny ausgewertet werden, regelt die bereits besprochene Direktive Order

Das folgende Beispiel verbietet zunächst einmal allen Hosts den Zugriff und erlaubt ihn anschließend Hosts aus den Domains office.mynet.de und external.mynet.de

Order Deny,Allow Deny from all Allow from office.mynet.de external.mynet.de

In Apache 2.4 genügt dazu folgende Zeile

Require host office.mynet.de external.mynet.de

Dieses Beispiel erlaubt dagegen allen Hosts den Zugriff, die nicht zur Domain unsere-konkurrenz.de4 gehören

Order Allow,Deny Allow from all Deny from unsere-konkurrenz.de

In Versionen ab 2.3-beta können Sie dies folgendermaßen ausdrücken

<RequireAll> Require all granted Require not host unsere-konkurrenz.de </RequireAll>

AllowMethods Legt fest, welche HTTP-Zugriffsmethoden in einem bestimmten Kontext erlaubt sind

Seit Version 2.3 Modul mod_allowmethods Kontext <Directory>, <Location>, <Files> Syntax AllowMethod HTTP-Methode [HTTP-Methode ...] Standardwert nicht gesetzt

Das neue Modul mod_allowmethods stellt die Direktive AllowMethods zur Verfügung

  • Diese ermöglicht innerhalb eines Verzeichniskontextes die Angabe der HTTP-Anfragemethoden, mit denen Benutzer auf die Ressourcen innerhalb des Verzeichnisses zugreifen dürfen
  • Dies ist einfacher als mit <Limit>-Containern, aber zurzeit gilt das Modul noch als experimentell

Das folgende Beispiel erlaubt im aktuellen Kontext die Methoden GET, POST und HEAD

AllowMethods GET POST HEAD

4 Natürlich nützt das in dieser Form nichts, weil die normalen Büro-PCs der auszuschließenden Konkurrenzfirma wahrscheinlich mit temporären IP-Adressen und Domain-Namen wie xdsl-client-08-15.t-online.de im Netz unterwegs sind. Überdies könnten Sie rechtliche Probleme bekommen (unlauterer Wettbewerb), wenn Sie die Konkurrenz explizit vom Zugriff auf Seiten ausschließen, die ansonsten für alle Welt zugänglich sind

Voreinstellung für alle Verzeichnisse Aus Sicherheitsgründen sollten Sie – wie in einigen speziellen Zusammenhängen bereits erwähnt – zunächst einmal Einstellungen für das Wurzelverzeichnis (/) vornehmen

  • Sämtliche Zugriffe und Optionen sollten hier verboten werden

Diese Einstellungen werden von allen unspezifizierten Verzeichnissen sowie allen <Directory>-, <Files>- und <Location>-Containern automatisch übernommen

  • Anschließend können Sie für einzelne untergeordnete Ressourcen jeweils die benötigten Optionen freischalten

Ein üblicher Grundeinstellungs-Container sieht beispielsweise so aus

<Directory />

  1. Alle Optionen deaktivieren Options None
  2. Sämtliches Überschreiben durch .htaccess dekativieren AllowOverride None
  3. Zugriffe aller Clients verbieten Require all denied
  4. Bis 2.2 werden statt "Require all denied"
  5. folgende zwei Zeilen verwendet
  6. Order Deny,Allow
  7. Deny from all

</Directory>

Die vorgefertigte Konfigurationsdatei enthält normalerweise nicht die Angabe Options None, sondern Options FollowSymLinks

  • Auf einem Server, den Sie allein verwalten, ist dies kein großes Problem, da Sie selbst entscheiden können, welche symbolischen Links Sie überhaupt anlegen möchten
  • Andererseits schadet es auch nichts, FollowSymLinks global zu deaktivieren und dann zusammen mit den anderen Optionen jeweils im Einzelfall einzuschalten

Sinnvolle Einstellungen für die DocumentRoot Die DocumentRoot bildet, wie erwähnt, das Wurzelverzeichnis der Website, die Apache ausliefert, wenn kein virtueller Host angesprochen wurde

  • Für dieses Verzeichnis müssen Sie demzufolge einige Einstellungen der globalen Verzeichniskonfiguration überschreiben, um die Website im Internet zu veröffentlichen

Hier zunächst ein typisches Beispiel

<Directory /usr/local/share/apache2/htdocs> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted

  1. Bis 2.2 folgende zwei Zeilen anstelle von "Require all granted"
  2. Order allow,deny
  3. Allow from all

</Directory>

Bei dieser Konfiguration sind die Optionen Indexes, FollowSymLinks und MultiViews eingeschaltet

  • Wenn Sie mit Server Side Includes arbeiten möchten

(siehe Kapitel 16, »SSI und Filter«), müssen Sie zusätzlich Includes aktivieren

  • Für CGI sollte dagegen in der Regel nicht ExecCGI verwendet werden, sondern ein per ScriptAlias in die DocumentRoot abgebildetes cgi-bin-Verzeichnis (Genaueres dazu in Kapitel 14, »CGI«)

Die Verwendung von .htaccess-Dateien wurde hier ebenfalls abgeschaltet

  • In Abschnitt 6.2, »Kontexte und Container«, wurde bereits begründet, warum dies in den meisten Fällen ratsam ist

Zu guter Letzt wurde der Zugriff auf die Site für beliebige Hosts gestattet


Anhang

Siehe auch