Apache/06 Grundkonfiguration/3 Allgemeine Direktiven: Unterschied zwischen den Versionen
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 | 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 | Hier wird beispielsweise das grundlegende Verzeichnis wichtiger Server-Ressourcen (ServerRoot) festgelegt | ||
wird konfiguriert | * 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 | 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 | * 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 | |||
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 | Sekunden etwas zu ändern | ||
geplant, die drei Werte getrennt konfigurierbar zu machen | * 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 | 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 | ||
steht für beliebig viele Anfragen | 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 | * 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 | * 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 | |||
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 | 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 | * 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 | 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 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 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 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 | Dies ist eine der wichtigsten Konfigurationsdirektiven | ||
TCP-Ports der Apache-Webserver auf eingehende Verbindungen lauscht | * 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 | 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 | * 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 | 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 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 | 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 | * 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 | * 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 | 443) betreiben, können Sie mit Hilfe dieser Direktive das Protokoll für den aktuellen Kontext angeben | ||
Verarbeitung protokollspezifischer Optionen durch AcceptFilter | * 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) | ||
für verschiedene Vorgänge vornehmen | * 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 | 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 | Der zweite Parameter ist die Mutex-Methode | ||
nur einmalig bei der Kompilierung angepasst werden | * 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 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 | ||
* 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 | ||
* 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 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 | |||
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 | * 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 | |||
kanonischen Namen werden das Präfix mod_ und die Dateiendung .so weggelas | |||
sen; dafür wird _module angehängt (z.B | sen; dafür wird _module angehängt (z.B | ||
zur ServerRoot interpretiert, falls sie keinen absoluten Pfad enthält | * 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 | 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 | Einige Module benötigen Unterstützung durch zusätzliche Dateien | ||
externe Bibliothek oder Objektdatei wird mithilfe von LoadFile geladen | * 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 | 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 | ||
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 | ||
Kilobyte beschränkt; hinzu kommen maximal 8 Kilobyte für Chunk-Header, wenn Transfer-Encoding: chunked verwendet wird | Kilobyte beschränkt; hinzu kommen maximal 8 Kilobyte für Chunk-Header, wenn Transfer-Encoding: chunked verwendet wird | ||
Cache-Funktionen«) | * 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 === | === Plattformspezifische Einstellungen === | ||
Die Konfigurationsanweisungen in diesem Abschnitt betreffen ebenfalls das allgemeine Verhalten des Server-Programms | Die Konfigurationsanweisungen in diesem Abschnitt betreffen ebenfalls das allgemeine Verhalten des Server-Programms | ||
Laufzeitmodelle von Apache festgelegt sind | * 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« | Lesen Sie auch die Beschreibungen der diversen Multiprocessing-Module in Kapitel 3, »Apache 2 im Überblick« | ||
Gebrauch von Prozessen und Threads machen | * 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 den Server komplett beenden und wieder starten | ||
den Server komplett beenden und wieder starten | * 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 | ||
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) | 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 | |||
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 | Die Direktive User funktioniert nur auf UNIX-Plattformen | ||
fest, unter der Apache Client-Anfragen beantwortet | * 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 | Per Voreinstellung läuft Apache 2 unter der User-ID -1 | ||
meisten Systemen dem User nobody | * Dies entspricht auf den meisten Systemen dem User nobody | ||
ist meist eine Benutzerkennung ohne Shell | * 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 | 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 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 | ||
Groupname oder eine Raute mit nachfolgender numerischer ID | * 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) | 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 | * 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 | * Sobald wieder Worker verfügbar sind, werden die Anfragen in Eingangsreihenfolge bearbeitet (FIFO-Prinzip) | ||
Direktive definiert die maximale Anzahl wartender Verbindungen in dieser Warteschlange | |||
Normalerweise brauchen Sie den voreingestellten Wert niemals anzupassen | 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 | * Wie sich SOMAXCONN gegebenenfalls anpassen lässt, entnehmen Sie bitte der Dokumentation Ihres Betriebssystems | ||
SOMAXCONN übersteigt, dann wird dieser ignoriert | |||
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 führen, dass einer oder mehrere von ihnen blockieren | ||
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 | ||
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 | ||
* 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 | 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 LockFile legt diese Datei fest | ||
LockFile legt diese Datei fest | * 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 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 | |||
in diesem Fall zunächst die Direktive ServerLimit anpassen, um die maximal einstellbare Anzahl von Prozessen oder Threads zu erhöhen | |||
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 | |||
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 | |||
Prozessanzahl, wenn die Anfragelast nachlässt | |||
Der spezielle Wert 0 bedeutet, dass die Lebensdauer eines Prozesses nicht eingeschränkt wird | 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 | 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 | * 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 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 | 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 | ||
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 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 | ||
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 | 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 | 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 | * 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 das Produkt von ServerLimit und ThreadsPerChild | ||
das Produkt von ServerLimit und ThreadsPerChild | * 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 | ||
./configure .. | ./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 | Ü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 | * 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 | * 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 dieser Wert normalerweise nicht geändert werden | ||
dieser Wert normalerweise nicht geändert werden | * 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 Wert von ThreadsPerChild erhöhen müssen | ||
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 | ||
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 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 | 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 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 | ||
* 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 | ||
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 | ||
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 | |||
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 | Diese Direktive ist nur unter Novell NetWare verfügbar | ||
andere MPMs definierten Direktive ThreadsPerChild | * 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 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 | 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 | * 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 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 | |||
== 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 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 | |||
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 | # 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 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 | ||
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 ServerAdmin legt diese Adresse fest | ||
ServerAdmin legt diese Adresse fest | * 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 | 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 | * 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 | über DNS | ||
des Servers | * 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«) | |||
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 | 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 | ||
* 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 | In der Regel ist die Einstellung On in Ordnung | ||
URLs nicht die Umgebungsvariable SERVER_NAME verwenden | * 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 | * 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 | 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 | 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 | * 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 | 1 | ||
2 | * Port aus dem Wert von ServerName | ||
3 | 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 | 1 | ||
2 | * Port aus dem Host-Header | ||
3 | 2 | ||
4 | * 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 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 | * Major: Die Hauptversionsnummer wird angegeben, z.B | ||
* Minor: Haupt- und Unterversionsnummer werden kombiniert, z.B | * Apache/2 | ||
* Min oder Minimal | * 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 | * 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 | ||
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 | 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 | |||
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 vor der Kompilierung im Quellcode ändern | ||
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 | ||
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 | 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 | |||
* Off: Apache erzeugt keine Informationsfußzeile | * Off: Apache erzeugt keine Informationsfußzeile | ||
* On: Es wird eine Fußzeile ohne E-Mail-Adresse generiert | * 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 | 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 | 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 | ||
/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«) | 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 | Dies ist eine der beiden Direktiven, die das Standardmodul mod_dir zur Verfügung stellt | ||
ausliefert, wenn anstelle einer Datei ein Verzeichnis angefordert wurde | * 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 | 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 | ||
(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 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 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 | Ü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 | ||
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 | * 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« | * 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) | |||
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 | ||
* 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 | 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 | |||
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 | ||
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 | 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 | * 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 | |||
* 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 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 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 | 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« | * 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 | |||
</Directory> | </Directory> | ||
<Directory /usr/share/web/test> | <Directory /usr/share/web/test> | ||
Options Includes | Options Includes | ||
# .. | # .. | ||
* 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 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 | 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 | |||
</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 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 | |||
</Directory> | </Directory> | ||
<Directory /usr/share/web/test> | <Directory /usr/share/web/test> | ||
Options +Includes | Options +Includes | ||
# .. | # .. | ||
* 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 | 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 | 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 | 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 | |||
</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 | 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 | 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 | * Deny,Allow: Diese Reihenfolge ist die Voreinstellung | ||
die Deny-Liste und dann die Allow-Liste ausgewertet werden | * 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 | |||
Zugriff wird zunächst den angegebenen (üblicherweise allen) Hosts gestattet, bevor er einer kleineren Anzahl verboten wird | |||
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 | 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 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 | |||
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 | ||
Hostname wiederum der IP-Adresse entspricht | * 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 | ||
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 | |||
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 | ||
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 | ||
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 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 | |||
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 | 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 Syntax von Deny ist mit Allow identisch | ||
Hosts vom Zugriff auf eine Server-Ressource ausgeschlossen sind | * 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 | 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 | ||
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 | 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 | |||
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 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 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 | 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 | ||
(siehe Kapitel 16, »SSI und Filter«), müssen Sie zusätzlich Includes aktivieren | (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 | 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
- Section 1: Global Environment
- The directives in this section affect the overall operation
- of Apache, such as the number of concurrent requests it can
- 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
- groupadd htgroup
- 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
- Section 2: 'Main' server configuration
- The directives in this section set up the values used by the
- 'main' server, which responds to any requests that aren't
- handled by a <VirtualHost> definition
- These values also
- provide defaults for any <VirtualHost> containers you may
- 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
- define AP_SERVER_BASEVENDOR "Apache Software Foundation"
- define AP_SERVER_BASEPRODUCT "Apache"
- define AP_SERVER_MAJORVERSION "2"
- define AP_SERVER_MINORVERSION "2"
- define AP_SERVER_PATCHLEVEL "9"
Die Werte lassen sich natürlich beliebig ändern
- Beispiel
- define AP_SERVER_BASEVENDOR "Sirius Cybernetics Corp."
- define AP_SERVER_BASEPRODUCT "The Hitchhiker's Web Server"
- define AP_SERVER_MAJORVERSION "3"
- define AP_SERVER_MINORVERSION "1"
- 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
- ..
- weitere Einstellungen für /usr/share/web
</Directory>
<Directory /usr/share/web/test> Options Includes
- ..
- 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
- ..
- 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
- ..
- weitere Einstellungen für /usr/share/web
</Directory>
<Directory /usr/share/web/test> Options +Includes
- ..
- 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
- ..
- 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 />
- Alle Optionen deaktivieren Options None
- Sämtliches Überschreiben durch .htaccess dekativieren AllowOverride None
- Zugriffe aller Clients verbieten Require all denied
- Bis 2.2 werden statt "Require all denied"
- folgende zwei Zeilen verwendet
- Order Deny,Allow
- 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
- Bis 2.2 folgende zwei Zeilen anstelle von "Require all granted"
- Order allow,deny
- 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