mpm_common
Eine Sammlung von Direktiven, die in mehr als einem Multi-Processing-Modul (MPM) implementiert sind.
MPM
AcceptMutex
Vom Apache verwendete Methode zur Serialisierung mehrerer Kindprozesse, die Anfragen an Netzwerk-Sockets entgegennehmen.
AcceptMutex Default|Methode
AcceptMutex Default
server config
leader
perchild
prefork
threadpool
worker

Die Direktive AcceptMutex bestimmt die Methode, die der Apache zur Serialisierung mehrerer Kindprozesse verwendet, welche Anfragen an Netzwerk-Sockets entgegennehmen. Vor Apache 2.0 war diese Methode nur zur Kompilierungszeit einstellbar. Die optimale Methode ist sehr stark von der Architektur und Plattform abhängig. Lesen Sie bitte Perfomance-Hinweise für weitere Details.

Wenn die Direktive auf `Default` eingestellt ist, dann wird die zur Kompilierungszeit gewählte Voreinstellung verwendet. Weitere mögliche Methoden sind unten angegeben. Beachten Sie, dass nicht alle Methoden auf allen Plattformen verfügbar sind. Wird eine Methode angegeben, die nicht verfügbar ist, dann wird eine Nachricht in das Fehlerprotokoll geschrieben, welche die verfügbaren Methoden auflistet.

`flock`
  verwendet die Systemfunktion `flock(2)`, um die durch die LockFile-Direktive definierte Datei zu sperren.
`fcntl`
  verwendet die Systemfunktion `fcntl(2)`, um die durch die LockFile-Direktive definierte Datei zu sperren.
`posixsem`
  verwendet POSIX-kompatible Semaphore, um den Mutex zu implementieren.
`pthread`
  verwendet gemäß der POSIX-Thread-Spezifikation implementierte POSIX-Mutexe.
`sysvsem`
  verwendet Semaphoren des SysV-Typs, um den Mutex zu implementieren.

Um die bei der Kompilierung gewählte Voreinstellung für Ihr System herauszufinden, können Sie Ihr LogLevel auf `debug` setzen. Dann wird der voreingestellte AcceptMutex ins ErrorLog geschrieben.

# Warnung

Auf den meisten Systemen stoppt der Server mit der Beantwortung von Anfragen, wenn die Option `pthread` ausgewählt wurde und ein Kindprozess unkontrolliert endet während er den `AcceptCntl`-Mutex hält. In diesem Fall muss der Server manuell neu gestartet werden, um wieder weiter zu arbeiten.

Eine Ausnahme stellt Solaris dar, da es einen Mechanismus anbietet, den der Apache verwendet und der üblicherweise die Freigabe des Mutex erlaubt, nachdem ein Kindprozess, der gerade einen Mutex hält, abgestürzt ist.

Wenn Ihr System die Funktion `pthread_mutexattr_setrobust_np()` bereitstellt, können Sie wahrscheinlich die Option `pthread` problemlos verwenden.

CoreDumpDirectory
Verzeichnis, in das der Apache zu wechseln versucht, bevor er einen Hauptspeicherauszug erstellt
CoreDumpDirectory Verzeichnis
Für die Voreinstellung siehe Beschreibung
server config
beos
leader
mpm_winnt
perchild
prefork
threadpool
worker

Dies beeinflusst das Verzeichnis, in welches der Apache zu wechseln versucht, bevor er einen Hauptspeicherauszug einen so genannten Core-Dump erstellt. Die Voreinstellung ist das ServerRoot-Verzeichnis. Da dieses jedoch nicht für den Benutzer beschreibbar sein soll, unter dem der Server läuft, werden normalerweise keine Hauptspeicherauszüge geschrieben. Wenn Sie zum Debuggen einen Hauptspeicherauszug haben möchten, können Sie ihn mit dieser Direktive an einem anderen Ort ablegen lassen.

# Hauptspeicherauszüge unter Linux

Wenn Apache als `root` startet und zu einem anderen Benutzer wechselt, deaktiviert der Linux-Kernel Hauptspeicherauszüge auch dann, wenn der Prozess in dem Verzeichnis schreiben darf. Ab Linux 2.4 reaktiviert Apache (ab 2.0.46) Hauptspeicherauszüge wieder, jedoch nur dann, wenn Sie explizit CoreDumpDirectory konfigurieren.

EnableExceptionHook
Aktiviert einen Hook, der nach einem Absturz noch Ausnahmefehler behandeln lassen kann
EnableExceptionHook On|Off
EnableExceptionHook Off
server config
leader
perchild
prefork
threadpool
worker
Verfügbar seit Version 2.0.49

Diese Direktive ist aus Sicherheitsgründen nur verfügbar, wenn der Server mit der Option `--enable-exception-hook` konfiguriert wurde. Sie aktiviert einen Hook, der es externen Modulen erlaubt, sich dort einzuhängen und nach dem Absturz eines Kindprozesses noch Aktionen durchzuführen.

Es existieren bereits zwei Module, `mod_whatkilledus` und `mod_backtrace`, welche diesen Hook verwenden. Weitere Informationen hierzu finden Sie auf Jeff Trawicks EnableExceptionHook-Seite.

Group
Benutzergruppe, unter welcher der Server Anfragen beantwortet
Group Unix-Gruppe
Group #-1
server config
beos
leader
mpmt_os2
perchild
prefork
threadpool
worker
Seit Apache 2.0 nur in der globalen Server-Konfiguration gültig

Die Direktive Group bestimmt die Benutzergruppe, unter welcher der Server Anfragen beantwortet. Um diese Direktive zu verwenden, muss der Server als `root` gestartet werden. Wenn Sie den Server unter einem nicht-root-Benutzer starten, wird er nicht zur angegebenen Gruppe wechseln können und statt dessen weiter mit der Gruppe des ursprünglichen Benutzers laufen. Unix-Gruppe kann sein:

Ein Gruppenname
  Verweist auf die durch den Namen angegebene Gruppe.
`#` gefolgt von einer Gruppennummer.
  Verweist auf die durch ihre Nummer angegebene Gruppe.

# Beispiel

Group www-group

Es wird empfohlen, dass Sie eine neue Gruppe speziell zum Betrieb des Servers erstellen. Einige Administratoren verwenden den Benutzer `nobody`. Dies ist jedoch nicht immer möglich oder gewünscht.

# Sicherheit

Setzen Sie Group (oder User) nicht auf `root`, solange Sie nicht ganz genau wissen, was Sie tun und welche Gefahren Sie eingehen.

Wichtiger Hinweis: Die Verwendung der Direktive innerhalb von VirtualHost wird nicht länger unterstützt. Benutzen Sie SuexecUserGroup um Ihren Server für suexec einzurichten.

# Anmerkung

Obwohl die Direktive Group in den MPMs beos und mpmt_os2 existiert, ist sie dort tatsächlich eine Leeranweisung und exisitert nur aus Kompatibilitätsgründen.

PidFile
Datei, in welcher der Server die Prozess-ID des Daemons ablegt
PidFile Dateiname
PidFile logs/httpd.pid
server config
beos
leader
mpm_winnt
mpmt_os2
perchild
prefork
threadpool
worker

Die Direktive PidFile bestimmt die Datei, in welcher der Server die Prozess-ID des Daemons ablegt. Wenn der Dateiname nicht absolut angegeben wird, wird er relativ zu ServerRoot interpretiert.

# Beispiel

PidFile /var/run/apache.pid

Es ist oft hilfreich, dem Server ein Signal senden zu können, damit er seine ErrorLogs und TransferLogs schließt und dann neu öffnet und seine Konfigurationsdateien neu einliest. Dies kann durch Senden eines SIGHUP-Signals (kill -1) an die Prozess-ID geschehen, die im PidFile eingetragen ist.

Die PidFile-Datei unterliegt den gleichen Warnungen über die Ablage von Protokolldateien und Sicherheit.

# Anmerkung

Ab Apache 2 wird empfohlen, nur das Skript apachectl zum (Neu-)Starten und Stoppen des Servers zu verwenden.

Listen
IP-Adressen und Ports, an denen der Server lauscht
Listen [IP-Addresse:]Port
server config
beos
leader
mpm_netware
mpm_winnt
mpmt_os2
perchild
prefork
threadpool
worker
Seit Apache 2.0 vorgeschrieben

Die Direktive Listen weist den Apache an, nur an den angegebenen IP-Adressen oder Ports zu lauschen. Standardmäßig antwortet er auf alle Anfragen an allen IP-Interfaces. Listen ist nun eine notwendige Anweisung. Wenn sie nicht in der Konfigurationsdatei enthalten ist, wird der Server-Start fehlschlagen. Dies ist eine Änderung gegenüber früheren Versionen des Apache.

Die Direktive Listen weist den Server an, ankommende Anfragen am angegebenen Port oder der Kombination aus Adresse und Port entgegenzunehmen. Wenn nur eine Portnummer angegeben ist, dann lauscht der Server am angegebenen Port an allen Interfaces. Wenn sowohl eine IP-Adresse als auch ein Port angegeben sind, dann lauscht der Server am angegeben Port und Interface.

Es können mehrere Listen-Anweisungen verwendet werden, um eine Reihe von Adressen und Port anzugeben, an denen gelauscht werden soll. Der Server antwortet auf Anfragen von jedem der aufgeführten Adressen und Ports.

Um beispielsweise den Server Verbindungen an den beiden Ports 80 und 8000 annehmen zu lassen, verwenden Sie:

Listen 80
Listen 8000

Um den Server Verbindungen an zwei angegebenen Interfaces und Ports annehmen zu lassen, verwenden Sie:

Listen 192.170.2.1:80
Listen 192.170.2.5:8000

IPv6-Adressen müssen wie in dem folgenden Beispiel in eckige Klammern eingeschlossen werden:

Listen [2001:db8::a00:20ff:fea7:ccea]:80

# Fehlermöglichkeit

Mehrere Listen-Direktiven für gleiche IP-Adresse und Port führen zur Fehlermeldung `Address already in use` Adresse schon in Benutzung.
DNS-Probleme
Bestimmen, welche Adressen und Ports der Apache verwendet
ListenBackLog
Maximale Länge der Warteschlange schwebender Verbindungen
ListenBacklog backlog
ListenBacklog 511
server config
beos
leader
mpm_netware
mpm_winnt
mpmt_os2
perchild
prefork
threadpool
worker

Die maximale Länge der Warteschlange schwebender Verbindungen. Üblicherweise ist keine Feineinstellung notwendig oder sinnvoll, auf einigen System kann es jedoch gewünscht sein, diesen Wert bei TCP-SYN-Angriffen zu erhöhen. Beachten Sie auch die Beschreibung des backlog-Parameters der Systemfunktion `listen(2)`.

Der Wert wird vom Betriebssystem oft auf eine niedrigere Einstellung begrenzt. Dies variiert von Betriebssystem zu Betriebssystem. Beachten Sie auch, dass viele Betriebssyteme nicht genau beachten, was für backlog angegeben ist, jedoch einen Wert basierend auf der Angabe (normalerweiseweise jedoch größer als diese) verwenden.

LockFile
Ablageort der Lock-Datei für die Serialisierung von entgegengenommenen Anfragen
LockFile Dateiname
LockFile logs/accept.lock
server config
leader
perchild
prefork
threadpool
worker

Die Direktive LockFile legt den Pfad zur Lock-Datei fest, die verwendet wird, wenn der Apache mit einer der AcceptMutex-Einstellungen `fcntl` oder `flock` verwendet wird. Die Anweisung sollte normalerweise bei der Voreinstellung belassen werden. Der Hauptgrund, sie zu ändern, ist, wenn das `logs`-Verzeichnis auf einem per NFS-eingebundenen Laufwerk liegt, da die Lock-Datei auf einer lokalen Platte abgelegt sein muss. Die PID Prozess-ID des Hauptserverprozesses wird automatisch an den Dateinamen angehängt.

# Sicherheit

Es ist am besten, die Ablage in einem allgemein für jedermann beschreibbaren Verzeichnis wie `/var/tmp` zu vermeiden, da ein Denial-of-Servide-Angriff gestartet werden könnte und der Server am Start gehindert werden könnte, indem eine Lock-Datei mit dem gleichen Namen erstellt wird, wie der Server sie zu erstellen versuchen würde.

AcceptMutex
MaxClients
Maximale Anzahl der Kindprozesse, die zur Bedienung von Anfragen gestartet wird
MaxClients Anzahl
Für Details siehe Beschreibung
server config
beos
leader
prefork
threadpool
worker

Die Direktive MaxClients setzt die Grenze für die Anzahl gleichzeitig bedienter Anfragen. Jeder Verbindungsversuch oberhalb der MaxClients-Begrenzung wird üblicherweise in eine Warteschlange gestellt, bis zu einer Anzahl basierend auf der ListenBacklog-Anweisung. Sobald ein Kindprozess am Ende einer anderen Anfrage freigegeben wird, wird die Verbindung bedient.

Für Server ohne Thread-Unterstützung (z.B. prefork) wird MaxClients als maximale Anzahl der Kindprozesse verstanden, die zur Bedienung von Anfragen gestartet werden. Die Voreinstellung ist `256`. Um diesen Wert zu erhöhen, muss auch ServerLimit angehoben werden.

Bei Servern mit Thread-Unterstützung und bei Hybrid-Servern (z.B. beos oder worker) begrenzt MaxClients die Gesamtzahl der Threads, die für die Bedienung von Anfragen verfügbar sind. Die Voreinstellung für beos ist `50`. Bei Hybrid-MPMs ist die Voreinstellung `16` (ServerLimit) multipliziert mit dem Wert `25` (ThreadsPerChild). Um MaxClients auf einen Wert zu erhöhen, der mehr als 16 Prozesse erfordert, müssen Sie daher auch ServerLimit anheben.

MaxMemFree
Maximale Menge des Arbeitsspeichers, den die Haupt-Zuteilungsroutine verwalten darf, ohne `free()` aufzurufen
MaxMemFree KBytes
MaxMemFree 0
server config
beos
leader
mpm_netware
prefork
threadpool
worker
mpm_winnt

Die Direktive MaxMemFree gibt die maximale Menge freier Kilobytes an, welche die Haupt-Zuteilungsroutine verwalten darf, ohne `free()` aufzurufen. Wenn keine Angabe gemacht wird, oder Null angegeben ist, wird dieser Wert nicht eingeschränkt.

MaxRequestsPerChild
Obergrenze für die Anzahl von Anfragen, die ein einzelner Kindprozess während seines Lebens bearbeitet
MaxRequestsPerChild number
MaxRequestsPerChild 10000
server config
leader
mpm_netware
mpm_winnt
mpmt_os2
perchild
prefork
threadpool
worker

Die Direktive MaxRequestsPerChild legt die Grenze für die Anzahl von Anfragen fest, die ein einzelner Kinprozess während seines Lebens bearbeitet. Nach MaxRequestsPerChild Anfragen stirbt der Kindprozess. Wenn MaxRequestsPerChild `0` ist, endet der Prozess niemals.

# Abweichende Voreinstellungen

Die Voreinstellung für mpm_netware und mpm_winnt ist `0`.

Die Begrenzung von MaxRequestsPerChild auf einen Wert ungleich Null hat zwei vorteilhafte Auswirkungen:

- sie begrenzt die Menge an Arbeitsspeicher, die ein Prozess durch (versehentliche) Speicherlecks verbrauchen kann.
- das Festlegen einer endlichen Lebensdauer von Prozessen hilft, die Anzahl von Prozessen zu reduzieren, wenn die Serverlast zurückgeht.

# Anmerkung

Bei KeepAlive-Anfragen wird nur die erste Anfrage für diese begrenzung gezählt. Eigentlich wird nur die Begrenzung für die Anzahl der Verbindungen pro Kindprozess geändert.

MaxSpareThreads
Maximale Anzahl unbeschäftigter Threads
MaxSpareThreads Anzahl
Für Details siehe Beschreibung
server config
beos
leader
mpm_netware
mpmt_os2
perchild
threadpool
worker

Maximale Anzahl unbeschäftigter Threads. Die verschiedenen MPMs behandeln diese Anweisung unterschiedlich.

Die Voreinstellung für perchild ist `MaxSpareThreads 10`. Das MPM überwacht die Anzahl der unbeschäftigten Threads auf der Basis einzelner Kindprozesse. Wenn zu viele unbeschäftigte Threads in einem Kindprozess existieren, beendet der Server Threads innerhalb dieses Kindprozesses.

Die Voreinstellung für worker, leader und threadpool ist `MaxSpareThreads 250`. Diese MPMs behandeln Threads auf einer serverweiten Basis. Wenn zu viele unbeschäftigte Threads im Server existieren, dann werden solange Kindprozesse beendet, bis die Anzahl der unbeschäftigten Threads kleiner als der angegebene Wert ist.

Die Voreinstellung für mpm_netware ist `MaxSpareThreads 100`. Da dieses MPM nur einen einzigen Prozess ausführt, ist die Zählung überschüssiger Threads ebenfalls serverweit.

beos and mpmt_os2 arbeiten ähnlich wie mpm_netware. Die Voreinstellung für beos ist `MaxSpareThreads 50`. Die Voreinstellung für mpmt_os2 ist `10`.

# Restriktionen

Der Wertebereich von MaxSpareThreads ist eingeschränkt. Apache korrigiert den angegebenen Wert automatisch gemäß den folgenden Regeln:

- perchild
  verlangt, dass MaxSpareThreads kleiner oder gleich ThreadLimit ist.
- mpm_netware
  verlangt einen Wert größer als MinSpareThreads.
- Bei leader, threadpool und worker muss der Wert größer oder gleich der Summe aus MinSpareThreads und ThreadsPerChild sein.

MinSpareThreads
StartServers
MinSpareThreads
Minimale Anzahl unbeschäftigter Threads, die zur Bedienung von Anfragespitzen zur Verfügung stehen
MinSpareThreads Anzahl
Für Details siehe Beschreibung
server config
beos
leader
mpm_netware
mpmt_os2
perchild
threadpool
worker

Minimale Anzahl unbeschäftigter Threads, um Anfragespitzen zu bedienen. Die verschiedenen MPMs behandeln die Anweisung unterschiedlich.

perchild verwendet die Voreinstellung `MinSpareThreads 5` und überwacht die Anzahl der unbeschäftigten Threads auf der Basis einzelner Kindprozesse. Wenn in einem Kindprozess nicht genügend unbeschäftigte Threads vorhanden sind, erstellt der Server neue Threads innerhalb dieses Kindprozesses. Wenn Sie also NumServers auf `10` und MinSpareThreads auf einen Wert von `5` setzen, haben Sie mindestens 50 unbeschäftigte Threads auf Ihrem System.

worker, leader und threadpool verwenden eine Voreinstellung von `MinSpareThreads 75` und behandeln unbeschäftigte Threads auf serverweiter Basis. Wenn nicht genügend unbeschäftigte Threads im Server vorhanden sind, dann werden solange Kindprozesse erzeugt, bis die Anzahl unbeschäftigter Threads größer als der angegebene Wert ist.

mpm_netware verwendet die Voreinstellung `MinSpareThreads 10` und verfolgt dies serverweit, da es ein Einzelprozess-MPM ist.

beos und mpmt_os2 arbeiten ähnlich wie mpm_netware. Die Voreinstellung für beos ist `MinSpareThreads 1`. Die Voreinstellung für mpmt_os2 ist `5`.

MaxSpareThreads
StartServers
ScoreBoardFile
Ablageort der Datei, die zur Speicherung von Daten zur Koordinierung der Kindprozesse verwendet wird
ScoreBoardFile Dateipfad
ScoreBoardFile logs/apache_status
server config
beos
leader
mpm_winnt
perchild
prefork
threadpool
worker

Apache verwendet ein Scoreboard zur Kommunikation zwischen seinen Eltern- und Kindprozessen. Einige Architekturen erfordern eine Datei zur Unterstützung der Kommunikation. Wenn die Datei undefiniert bleibt, versucht der Apache zuerst, das Scoreboard im Arbeitsspeicher zu erstellen (Verwendung von anonymem Shared-Memory), und versucht bei einem Fehlschlag anschließend die Datei auf der Festplatte zu erstellen (Verwendung von Datei-basiertem Shared-Memory). Die Angabe dieser Direktive veranlaßt den Apache stets, die Datei auf der Festplatte zu erstellen.

# Beispiel

ScoreBoardFile /var/run/apache_status

Datei-basiertes Shared-Memory ist für Applikationen von Drittanbietern hilfreich, die direkten Zugriff auf das Scoreboard benötigen.

Wenn Sie eine ScoreBoardFile-Anweisung verwenden, erreichen Sie eventuell eine höhere Geschwindigkeit, wenn Sie die Datei auf einer RAM-Disk ablegen. Achten Sie darauf, die gleichen Warnungen wie über die Ablage von Protokolldateien und Sicherheit zu beherzigen.

Apache beenden und neu starten
SendBufferSize
Größe des TCP-Puffers
SendBufferSize Bytes
SendBufferSize 0
server config
beos
leader
mpm_netware
mpm_winnt
mpmt_os2
perchild
prefork
threadpool
worker

Der Server setzt die Größe des TCP-Puffers auf die angegebene Anzahl Bytes. Dies ist sehr hilfreich, um Voreinstellungen alter Standardbetriebssysteme für Hochgeschwindigkeitsverbindungen mit hoher Latenzzeit anzuheben (d.h. 100ms oder so, wie bei Interkontinentalverbindungen).

Wird der Wert auf `0` gesetzt, dann verwendet der Server die Voreinstellung des Betriebssystems.

ServerLimit
Obergrenze für die konfigurierbare Anzahl von Prozessen
ServerLimit Anzahl
Für Details siehe Beschreibung
server config
leader
perchild
prefork
threadpool
worker

Bei dem MPM prefork bestimmt die Direktive den während der Lebensdauer des Apache-Prozesses maximal einstellbaren Wert für MaxClients. Beim MPM worker bestimmt die Direktive in Verbindung mit ThreadLimit den Maximalwert für MaxClients für die Lebensdauer des Apache-Prozesses. Jeder Versuch, diese Anweisung während eines Neustarts zu ändern, wird ignoriert. MaxClients kann jedoch während eines Neustarts geändert werden.

Lassen Sie besondere Vorsicht bei der Verwendung dieser Direktive walten. Wenn ServerLimit auf einen Wert deutlich höher als notwendig gesetzt wird, wird zusätzliches, unbenutztes Shared-Memory belegt. Wenn sowohl ServerLimit als auch MaxClients auf Werte gesetzt werden, die größer sind, als das System sie handhaben kann, dann kann der Apache möglicherweise nicht starten, oder das System kann instabil werden.

Verwenden Sie die Direktive bei dem MPM prefork nur, wenn Sie MaxClients auf mehr als 256 (Voreinstellung) setzen müssen. Setzen Sie den Wert nicht höher als den Wert, den Sie für MaxClients angeben möchten.

Verwenden Sie die Direktive bei worker, leader und threadpool nur, wenn Ihre MaxClients- und ThreadsPerChild-Einstellungen mehr als 16 Serverprozesse (Voreinstellung) erfordern. Setzen Sie den Wert dieser Direktive nicht höher, als die Anzahl der Serverprozesse, die dafür erforderlich ist, was Sie bei MaxClients und ThreadsPerChild angeben möchten.

Verwenden Sie die Direktive beim MPM perchild nur, wenn Sie NumServers auf einen Wert größer als 8 (Voreinstellung) setzen müssen.

# Anmerkung

Eine feste Begrenzung von `ServerLimit 20000` ist in den Server einkompiliert (bei dem MPM prefork 200000). Dies soll unangenehme Effekte durch Tippfehler verhindern.

Apache beenden und neu starten
StartServers
Anzahl der Kindprozesse des Servers, die beim Start erstellt werden
StartServers Anzahl
Für Details siehe Beschreibung
server config
leader
mpmt_os2
prefork
threadpool
worker

Die Direktive StartServers bestimmt die Anzahl der Kindprozesse des Servers, die beim Start erstellt werden. Da die Anzahl der Prozesse abhängig von der Last dynamisch kontrolliert wird, besteht normalerweise wenig Grund für eine Änderung dieses Parameters.

Die Voreinstellung unterscheidet sich von MPM zu MPM. Bei leader, threadpool und worker ist die Voreinstellung `StartServers 3`. Die Voreinstellung bei prefork ist `5` und bei mpmt_os2 `2`.

StartThreads
Anzahl der Threads, die beim Start erstellt werden
StartThreads Anzahl
Für Details siehe Beschreibung
server config
beos
mpm_netware
perchild

Anzahl der Threads, die beim Start erstellt werden. Da die Anzahl der Threads abhängig von der Last dynamisch kontrolliert wird, besteht normalerweise wenig Grund für eine Änderung dieses Parameters.

Die Voreinstellung für perchild ist `StartThreads 5`. Die Direktive setzt während des Starts die Anzahl der Threads pro Prozess.

Die Voreinstellung bei mpm_netware ist `StartThreads 50`. Da hier lediglich ein einzelner Prozess existiert, ist dies die Gesamtzahl der Threads, die beim Start erstellt wird, um Anfragen zu bedienen.

Die Voreinstellung für beos ist `StartThreads 10`. Die Einstellung reflektiert ebenfalls die Gesamtzahl der Threads, die beim Start erstellt werden, um Anfragen zu bedienen.

ThreadLimit
Bestimmt die Obergrenze der konfigurierbaren Anzahl von Threads pro Kindprozess
ThreadLimit Anzahl
Für Details siehe Beschreibung
server config
leader
mpm_winnt
perchild
threadpool
worker
Verfügbar für mpm_winnt ab Apache 2.0.41

Die Direktive bestimmt den während der Lebensdauer des Apache-Prozesses maximal einstellbaren Wert für ThreadsPerChild. Jeder Versuch, diese Direktive während eines Neustarts zu ändern, wird ignoriert. ThreadsPerChild kann jedoch während eines Neustarts modifiziert werden bis zu dem Wert dieser Anweisung.

Lassen Sie besondere Vorsicht bei der Verwendung dieser Direktive walten. Wenn ThreadLimit auf einen Wert deutlich höher als ThreadsPerChild gesetzt wird, wird zusätzliches, ungenutztes Shared-Memory belegt. Wenn sowohl ThreadLimit als auch ThreadsPerChild auf Werte gesetzt werden, die größer sind, als das System sie handhaben kann, dann kann der Apache möglicherweise nicht starten oder das System kann instabil werden. Setzen Sie den Wert dieser Direktive nicht höher als Ihre größte erwartete Einstellung für ThreadsPerChild während der aktuellen Ausführung des Apache.

Die Voreinstellung für ThreadLimit ist `1920` wenn sie zusammen mit mpm_winnt verwendet wird, und `64` bei der Verwendung mit anderen MPMs.

# Anmerkung

Eine feste Begrenzung von `ThreadLimit 20000` (oder `ThreadLimit 15000` bei mpm_winnt) ist in den Server einkompiliert. Dies soll unangenehme Effekte durch Tippfehler verhindern.

ThreadsPerChild
Anzahl der Threads, die mit jedem Kindprozess gestartet werden
ThreadsPerChild Anzahl
Für Details siehe Beschreibung
server config
leader
mpm_winnt
threadpool
worker

Die Direktive legt die Anzahl der Threads fest, die mit jedem Kindprozess gestartet werden. Der Kindprozess erstellt diese Threads beim Start und erstellt später keine weiteren mehr. Wenn Sie ein MPM wie mpm_winnt verwenden, wo nur ein Kindprozess existiert, dann sollte diese Angabe hoch genug sein, die gesamte Last des Servers zu bewältigen. Wenn Sie ein MPM wie worker verwenden, wo mehrere Kindprozesse existieren, dann sollte die Gesamtzahl der Thread groß genug sein, die übliche Last auf dem Server zu bewältigen.

Die Voreinstellung für ThreadsPerChild ist `64`, wenn mpm_winnt verwendet wird, und `25` bei der Verwendung der anderen MPMs.

ThreadStackSize
Die Größe des Stacks in Bytes, der von Threads verwendet wird, die Client-Verbindungen bearbeiten.
ThreadStackSize size
65536 unter NetWare; variiert bei anderen Betriebssystemen.
server config
leader
mpm_netware
mpm_winnt
perchild
threadpool
worker
Verfügbar seit Version 2.1

Die Direktive ThreadStackSize legt die Größe des Stacks (für Autodaten) der Threads fest, die Client-Verbindungen bearbeiten und Module aufrufen, welche bei der Verarbeitung dieser Verbindungen helfen. In den meisten Fällen ist die Voreinstellung des Betriebssystems angemessen, doch unter bestimmten Umständen kann es sinnvoll sein, den Wert anzupassen:

- Auf Plattformen mit einer relativ kleinen Voreingestellung für die Größe des Thread-Stacks (z.B. HP-UX) kann der Apache bei der Verwendung einiger Drittanbietermodule, die einen relativ hohen Bedarf an Speicherplatz haben, abstürzen. Ebendiese Module arbeiten möglicherweise problemlos auf anderen Plattformen, wo der voreingestellte Thread-Stack größer ist. Derartige Abstürze können Sie vermeiden, indem Sie ThreadStackSize auf einen höheren Wert als die Betriebssystemvoreinstellung setzen. Eine solche Anpassung ist nur notwendig, wenn es vom Anbieter des Moduls so spezifiziert wurde oder die Diagnose eines Apache-Absturzes ergeben hat, das die Thread-Stackgröße zu klein war.
- Auf Plattformen, wo die voreingestellte Thread-Stackgröße für die Webserverkonfiguration deutlich größer als notwendig ist, kann eine größere Anzahl von Threads pro Kindprozess erreicht werden, wenn ThreadStackSize auf einen Wert kleiner als die Betriebssystemvoreinstellung gesetzt wird. Da es einzelne Anfragen geben kann, die mehr Stack zur Verarbeitung benötigen, sollte eine derartige Korrektur ausschließlich in Testumgebungen zum Einsatz kommen, auf denen die gesamte Webserververarbeitung ausprobiert werden kann. Eine Änderung der Webserverkonfiguration kann den aktuellen Wert der ThreadStackSize ungültig machen.

User
Die Benutzerkennung, unter welcher der Server Anfragen beantwortet
User Unix-User-ID
User #-1
server config
leader
perchild
prefork
threadpool
worker
Seit Apache 2.0 nur in der globalen Server-Konfiguration gültig

Die Direktive User legt die Benutzerkennung fest, mit der der Server Anfragen beantwortet. Um diese Anweisung zu verwenden, muss der Server als `root` gestartet werden. Wenn Sie den Server unter einem nicht-root-Benutzer starten, kann er nicht zu dem minder privilegierten Benutzer wechseln und wird statt dessen weiter mit der ursprünglichen Benutzerkennung laufen. Wenn Sie den Server als `root` starten, dann ist es normal, dass der Elternprozess als root weiterläuft. Unix-User-ID kann sein:

Ein Benutzername
  Verweist auf den durch Namen angegebenen Benutzer.
# gefolgt von einer Benutzernummer.
  Verweist auf einen durch eine Nummer angegebenen Benutzer.

Der Benutzer sollte keine Rechte besitzen, die dazu führen, dass er in der Lage ist, auf Dateien zuzugreifen, die nicht dafür bestimmt sind, für die Außenwelt sichtbar zu sein. Gleichermaßen sollte der Benutzer nicht in der Lage sein, Code auszuführen, der nicht für HTTP-Anfragen bestimmt ist. Es wird empfohlen, einen neuen Benutzer und eine neue Gruppe speziell zur Ausführung des Servers zu erstellen. Einige Administratoren verwenden den Benutzer `nobody`. Dies ist jedoch nicht immer wünschenswert, da der Benuter `nobody` andere Rechte auf dem System besitzen kann.

# Sicherheit

Setzen Sie User (oder Group) nicht auf `root`, solange Sie nicht genau wissen, was Sie tun, und welches die Gefahren sind.

Beim MPM perchild, das dafür gedacht ist, virtuelle Hosts unter verschiedenen Benutzerkennungen auszuführen, bestimmt die Direktive User die Benutzerkennung für den Hauptserver und bildet den Rückfallwert für VirtualHost-Abschnitte ohne eine AssignUserID-Anweisung.

Wichtiger Hinweis: Die Verwendung dieser Direktive innerhalb von VirtualHost wird nicht mehr unterstützt. Benutzen Sie SuexecUserGroup, um Ihren Server für suexec einzurichten.

# Anmerkung

Obwohl die Direktive User in den MPMs beos und mpmt_os2 existiert, ist sie dort tatsächlich eine Leeranweisung und exisitert nur aus Kompatibilitätsgründen.