Optimisation des performances d'Apache

Les principales directives de l'environnement d'Apache

Timeout

La directive TimeOut définit la temporisation courante pendant laquelle Apache attendra l'une de ces trois choses :

  • Le temps total de réception d'une requête GET.
  • Le temps entre la réception de paquets TCP lors d'une requête POST ou PUT.
  • Le temps entre deux acquittements lors de la transmission de paquets TCP de réponse.

La valeur par défaut était de 1200 avant la version 1.2, mais a été abaissée à 300 depuis, ce qui est déjà largement plus que nécessaire dans la plupart des situations. Il n'est cependant pas réglé plus bas car il peut exister (encore) des portions de code un peu "floues" par lesquelles le temporisateur n'est pas remis à zéro lors de la transmission d'un paquet.

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300

KeepAlive

L'extension Keep-Alive d'HTTP/1.0 et les connexions persistantes d'HTTP/1.1 fournissent des sessions durables HTTP , qui autorisent plusieurs requêtes à être envoyées sur la même connexion. Dans certains cas, il a été constaté une réduction de 50% du temps de latence pour des documents HTML contenant de nombreuses images. Pour activer les connexions persistantes (keep-alive) à partir d'Apache 1.2 il faut définir la directive KeepAlive On.

Pour les clients HTTP/1.1, Les connexions persistantes ne sont employées que si elles sont spécifiquement demandées par un client. De plus, une connexion persistantes ne peut être employées que si la taille du contenu est connu à l'avance. Ceci implique que les contenus dynamiques, tels que les scripts CGI, les pages SSI, et les listes de répertoires générés par le serveur n'utilisent pas de connexions persistantes pour les clients HTTP/1.0. Pour les clients HTTP/1.1, les connexions sont persistantes par défaut à moins d'être spécifiée. Si le client le demande, l'encodage par tranches est utilisé afin d'envoyer des contenus de tailles inconnus au travers de connexions persistantes.

La directive KeepAlive autorise l'envoi de requêtes multiples sur la même connexion TCP. C'est particulièrement utile pour la prise en charge de pages HTML comportant de nombreuses images. Si KeepAlive est positionnée sur Off, alors une connexion TCP séparée doit être créée pour chacune des images. La surcharge causée par l'établissement des connexions TCP peut être éliminée en positionnant KeepAlive sur On.

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

MaxKeepAliveRequests

La directive MaxKeepAliveRequests limite le nombre de requêtes permises pour une connexion unique lorsque la directive KeepAlive est activée. Si nombre vaut "0", chaque connexion peut admettre un nombre illimité de requêtes. Nous recommendons que ce paramètre soit réglé sur une valeur relativement haute pour obtenir des performances optimales du serveur. Dans la version 1.1 d'Apache, ceci est contrôlé par la directive Keepalive

La directive KeepAlive est utilisée dans le cas de requêtes persistantes. Cela sert pour des pages HTML avec beaucoup d'images. La surcharge causée par les connexions persistantes peut être supprimée en fixant KeepAlive à On. Fixez de même une valeur basse à KeepAliveTimeout qui définit la durée (en seconde) d'attente de la prochaine requête, et une valeur moyenne à MaxKeepAliveRequests qui définit le nombre maximum de requetes pendant une connexion persistante.

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

KeepAliveTimeout

Le nombre de secondes pendant lesquelles Apache attendra une requête postérieure avant de rompre une connexion. Dès qu'une requête est reçue, la valeur de la temporisation spécifiée par la directive Timeout s'applique.

Mettre KeepAliveTimeout à une grande valeur peut créer des problèmes de performance pour des serveurs chargés. Le plus grand est ce délai, le plus les processus du serveur seront occupés en attente de connexions avec des clients inactifs.

KeepAliveTimeout détermine la durée d'attente de la prochaine requête. Donnez-lui une valeur basse, peut-être entre deux et cinq secondes. Si la valeur fixée est trop élevèe, les processus enfants sont immobilisés, attendant le client alors qu'ils peuvent être utilisés pour satisfaire de nouveaux clients.

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

Server-Pool Size Regulation (MPM specific) : prefork MPM ou worker MPM ?...

  • apache2-mpm-worker ou apache2-mpm-prefork?
    • MPM ? Cela signifie Multi-Processing Modules
    • Par défaut les dernières versions sont compilées avec mpm-prefork. Celle-ci peut utiliser une extension PHP5 tandis que mpm-worker doit faire appel à FastCGI.
  • Apache prefork vs. worker for this setup, the worker MPM was almost twice as fast as the prefork.
    • Unfortunately, PHP5 does not work with the Worker MPM. On my Ubuntu server, PHP5 can only be installed with the Prefork MPM.
      • PHP5 can work with MPM Worker too. But you have to use CGI or FastCGI instead of Apache module.
  • Choix des MPM appropriés Les systèmes Linux peuvent choisir d'employer un MPM avec fil d'exécution comme worker ou un MPM sans fil d'exécution comme prefork :
    • Le MPM worker emploie de multiples processus enfants. Il est multiprocessus à l'intérieur de chaque processus enfant, et chaque fil gère une seule connexion. Worker est rapide, hautement extensible et comparativement peu exigeant en mémoire. Il convient parfaitement pour des processeurs multiples. Par ailleurs, worker est moins tolérant aux modules défectueux, et un module défectueux peut affecter tous les fils d'un processus enfant.
    • Le MPM prefork emploie de multiples processus enfants, dont chacun gère une connexion à la fois. Prefork est bien adapté aux systèmes à un ou deux processeurs, la rapidité est comparable à celle de worker et il est hautement tolérant aux modules défectueux et aux « plantages » de processus enfants — mais il consomme beaucoup de mémoire. De plus, davantage de trafic entraîne une plus grande utilisation de mémoire.
##
## Server-Pool Size Regulation (MPM specific)
##
 
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
 
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

apache2handler, sous linux

Apache Version 	Apache/2.2.9 (Debian) PHP/5.3.6-6~dotdeb.0 with Suhosin-Patch 
Max Requests 	Per Child: 0 - Keep Alive: on - Max Per Connection: 100
Timeouts 	Connection: 300 - Keep-Alive: 15 
Loaded Modules 	core mod_log_config mod_logio prefork http_core mod_so mod_alias mod_auth_basic mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_deflate mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_setenvif mod_status

apache2handler, sous windows

Apache Version 	Apache/2.2.11 (Win32) mod_ssl/2.2.11 OpenSSL/0.9.8o PHP/5.3.3 
Max Requests 	Per Child: 0 - Keep Alive: on - Max Per Connection: 100
Timeouts 	Connection: 300 - Keep-Alive: 5 
Loaded Modules 	core mod_win32 mpm_winnt http_core mod_so mod_actions mod_alias mod_asis mod_auth_basic mod_authn_default mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_include mod_isapi mod_log_config mod_mime mod_negotiation mod_setenvif mod_ssl mod_php5
   ServerLimit 128 ⇔ On démarre au max 128 processus. Le nombre de processus lancé est ajusté dynamiquement, apache lancera 128 processus uniquement si c’est nécessaire.
   MaxClients 128 ⇔ On permet 128 connexions simultanées (MaxClients = ServerLimit)
   MinSpareServers 5 ⇔ On demande à apache de conserver au minimum 5 processus en attente de connexion.
   MaxSpareServers 10 ⇔ On demande à apache de ne pas conserver plus de 10 processus en attente de connexion.
   MaxRequestsPerChild 1000 ⇔ Au bout de 1000 connexions sur un enfant on le tue (permet de tolérer les éventuelles fuites mémoires)
StartServers

La directive StartServers définit le nombre de processus fils créés dès le démarrage du serveur. Le nombre de ces processus étant contrôlé dynamiquement en fonction de la charge, il y a en général peu d'intérêt à modifier la valeur par défaut de ce paramètre.

Lorsque le serveur est exécuté sous Microsoft Windows, cette directive n'a aucun effet. Comme la version Windows d'Apache est écrite en multithread, un seul processus gère l'intégralité des requêtes. La directive ThreadsPerChild contrôle le nombre maximal de threads traitant les requêtes, ce qui a un effet similaire à la directive Unix StartServers

La directive StartServers fixe le nombre de processus enfants que le serveur crée au démarrage. Apache continuera à créer des processus enfants jusqu'à ce que le paramètre MinSpareServers soit atteint. Cela n'aura pas grand effet sur les performances si le serveur n'est pas redémarré fréquemment. S'il y a beaucoup de requêtes et qu'Apache est souvent redémarré, donnez à cette directive une valeur relativement élevée.

MinSpareServers et MaxSpareServers

La directive MinSpareServers indique le nombre minimum de processus fils en attente qu'un serveur pourra conserver. S'il existe moins de MinSpareServers processus serveurs fils en attente, le processus père recréera des processus fils au rythme de 1 par seconde.

L'activation de cette fonctionnalité ne devrait être nécessaire que sur des sites très chargés. Régler ce paramètre sur une grande valeur est de toutes façons toujours une mauvaise idée.

La directive MaxSpareServers indique le nombre maximal de processus fils en attente. Un processus en attente est un processus qui existe, mais qui ne traite pas de requête. S'il existe plus de MaxSpareServers de ces processus, alors le père viendra tuer les processus en supplémentaires.

L'activation de cette fonctionnalité ne devrait être nécessaire que sur les site vraiment très chargés. Régler ce paramètre sur une grande valeur est de toutes façon toujours une mauvaise idée.

Ces directives n'ont aucun effet quand elles sont employées sur les plates-formes WIndows.

MaxSpareServers et MinSpareServers déterminent combien de processus enfants doivent rester actifs tout en attendant des requêtes. Si MinSpareServers est réglé trop bas et qu'un grand nombre de demandes survient, Apache devra engendrer des processus enfants supplémentaires pour satisfaire les requêtes. Créer des processus enfants est relativement exigeant en mémoire. Si le serveur est occupé à créer des processus enfants, il ne sera pas en mesure de prendre en charge les requêtes des clients immédiatement. MaxSpareServers ne devrait pas être réglé trop haut : trop de processus enfants consommeront des ressources inutilement.

Affinez MinSpareServers et MaxSpareServers de façon à ce qu'Apache n'ait pas à engendrer plus de 4 processus enfants par seconde (Apache peut engendrer un maximum de 32 processus enfants par seconde). Si plus de 4 processus enfants par seconde sont engendrés, un message est journalisé dans ErrorLog.

MaxClients

La directive MaxClients indique le nombre limite de requêtes simultanées pouvant être acceptées par le serveur ; il représente le nombre maximum de processus serveur fils qui peuvent tourner à un instant donné. Pour configurer plus de 256 clients, vous devez modifier la constante HARD_SERVER_LIMIT du fichier source d'Apache httpd.h et recompiler Apache.

Les tentatives de connexions au delà de MaxClients sont normalement mises en attente, jusqu'à une limite fixée par la directive ListenBacklog. Une fois qu'un processus fils est libre à la fin d'une requête différente, la connexion en attente est traitée.

ListenBacklog

La longueur maximale de la file d'attente des connexions en attente. En général, aucun ajustement n'est nécessaire, cependant, il est souhaitable sur certains systèmes d'augmenter cette longueur de file pour répondre à des attaques TCP SYN.

La directive ListenBacklog (511 par défaut) est limitée à un petit nombre par le système d'exploitation. Elle peut varier d'un système à un autre. Il faut également noter que pour la plupart des systèmes, la valeur réellement utilisée n'est pas celle spécifiée par la directive, mais un nombre basé sur cette valeur (généralement plus grande).

MaxRequestsPerChild

La directive MaxRequestsPerChild fixe la limite du nombre de requêtes que gérera un seul processus enfant du serveur. Après les requêtes MaxRequestsPerChild, le processus enfant mourra mais comme il est fixé à 0 par défaut, le processus enfant n'expirera jamais. Il est approprié de donner à cette directive une valeur de quelques milliers. Cela peut aider à empêcher des pertes de mémoire, puisque le processus meurt après avoir satisfait un certain nombre de requêtes. Ne fixez pas une valeur trop basse, car la création de nouveaux processus est exigeante en temps système.

error.log [error] server reached MaxClients setting, consider raising the MaxClients setting

  • MaxClients Directive
    • MaxClients translates into the maximum number of child processes that will be launched to serve requests. The default value is 256; to increase it, you must also raise ServerLimit.
    • ServerLimit Directive
    • For the prefork MPM, this directive sets the maximum configured value for MaxClients for the lifetime of the Apache process.
MaxClients

La directive MaxClients fixe la limite maximale de requêtes simultanées que le serveur peut prendre en charge ; aucun processus enfant au-delà de ce nombre n'est engendré. Il ne devrait pas être défini à une valeur trop basse, sinon un nombre toujours croissant de connexions sont reportées dans la file d'attente et occasionnent finalement un dépassement du temps imparti, alors que les ressources du serveur restent inutilisées. Si vous lui donnez une valeur trop élevée, en revanche, le serveur commencera à « swapper », ce qui fera diminuer considérablement le temps de réponse. La valeur appropriée pour MaxClients peut être calculée ainsi (voir aussi Bien configurer apache pour une illustration du calcul) :

MaxClients = Mémoire vive totale dédiée au serveur web / Taille maximale des processus enfants.

La taille des processus enfants destinés à prendre en charge des fichiers statiques est d'environ 2 à 3 Mo. Pour du contenu dynamique tel que PHP, elle peut être aux environs de 15 Mo. La colonne RSS dans ps -fylC apache2 --sort:rss affiche l'utilisation de la mémoire physique non permutée par des processus Apache en kilooctets.

S'il y a plus d'utilisateurs simultanés que MaxClients, les requêtes seront mises en file d'attente jusqu'à un nombre défini en fonction de la directive ListenBacklog. Augmentez ServerLimit pour régler MaxClients au-dessus de 256.

Benchmark Apache

ab - Apache HTTP server benchmarking tool
ab -n 10000 -c 10 http://192.168.1.80/index.html
      -c concurrency
             Number of multiple requests to perform at a time. Default is one request at a time.
             
      -k     Enable the HTTP KeepAlive feature, i.e., perform multiple requests within one HTTP session. Default is no KeepAlive.
             
      -n requests
             Number of requests to perform for the benchmarking session. The default is to just perform a single request which  usually  leads  to  non-representative
             benchmarking results.
             
      -t timelimit
             Maximum  number of seconds to spend for benchmarking. This implies a -n 50000 internally. Use this to benchmark the server within a fixed total amount of
             time. Per default there is no timelimit.
# ab -k -n 100 -c 10 "http://www.placeoweb.com/?&login=monLogin&password=monPassword&uri=?goto=../redirection.php"
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
 
Benchmarking www.placeoweb.com (be patient).....done
 
 
Server Software:        Apache/2.2.9
Server Hostname:        www.placeoweb.com
Server Port:            80
 
Document Path:          /?&login=monLogin&password=monPassword&uri=?goto=../redirection.php
Document Length:        534 bytes
 
Concurrency Level:      10
Time taken for tests:   1.484 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Non-2xx responses:      100
Keep-Alive requests:    100
Total transferred:      117810 bytes
HTML transferred:       53400 bytes
Requests per second:    67.36 [#/sec] (mean)
Time per request:       148.446 [ms] (mean)
Time per request:       14.845 [ms] (mean, across all concurrent requests)
Transfer rate:          77.50 [Kbytes/sec] received
 
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:    62  143  52.5    134     386
Waiting:       62  143  52.5    134     386
Total:         62  143  52.6    134     387
 
Percentage of the requests served within a certain time (ms)
  50%    134
  66%    151
  75%    165
  80%    171
  90%    197
  95%    256
  98%    296
  99%    387
 100%    387 (longest request)

Apache httpd/apache2 Options

common Apache httpd command line options

VMP017:~# apache2 -h
Usage: apache2 [-D name] [-d directory] [-f file]
               [-C "directive"] [-c "directive"]
               [-k start|restart|graceful|graceful-stop|stop]
               [-v] [-V] [-h] [-l] [-L] [-t] [-S] [-X]
Options:
  -D name            : define a name for use in <IfDefine name> directives
  -d directory       : specify an alternate initial ServerRoot
  -f file            : specify an alternate ServerConfigFile
  -C "directive"     : process directive before reading config files
  -c "directive"     : process directive after reading config files
  -e level           : show startup errors of level (see LogLevel)
  -E file            : log startup errors to file
  -v                 : show version number
  -V                 : show compile settings
  -h                 : list available command line options (this page)
  -l                 : list compiled in modules
  -L                 : list available configuration directives
  -t -D DUMP_VHOSTS  : show parsed settings (currently only vhost settings)
  -S                 : a synonym for -t -D DUMP_VHOSTS
  -t -D DUMP_MODULES : show all loaded modules
  -M                 : a synonym for -t -D DUMP_MODULES
  -t                 : run syntax check for config files
  -X                 : debug mode (only one worker, do not detach)
VMP017:~# apache2 -v
Server version: Apache/2.2.9 (Debian)
Server built:   Nov 14 2009 21:07:23
 
VMP017:~# apache2 -V
Server version: Apache/2.2.9 (Debian)
Server built:   Nov 14 2009 21:07:23
Server's Module Magic Number: 20051115:15
Server loaded:  APR 1.2.12, APR-Util 1.2.12
Compiled using: APR 1.2.12, APR-Util 1.2.12
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT=""
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"
 
VMP017:~# apache2 -l
Compiled in modules:
  core.c
  mod_log_config.c
  mod_logio.c
  prefork.c
  http_core.c
  mod_so.c
 
VMP017:~# apache2 -L
<Directory (core.c)
        Container for directives affecting resources located in the specified directories
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
<Location (core.c)
        Container for directives affecting resources accessed through the specified URL paths
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
<VirtualHost (core.c)
        Container to map directives to a particular virtual host, takes one or more host addresses
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
<Files (core.c)
        Container for directives affecting files matching specified patterns
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
<Limit (core.c)
        Container for authentication directives when accessed using specified HTTP methods
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
<LimitExcept (core.c)
        Container for authentication directives to be applied when any HTTP method other than those specified is used to access the resource
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
<IfModule (core.c)
        Container for directives based on existance of specified modules
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
<IfDefine (core.c)
        Container for directives based on existance of command line defines
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
<DirectoryMatch (core.c)
        Container for directives affecting resources located in the specified directories
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
<LocationMatch (core.c)
        Container for directives affecting resources accessed through the specified URL paths
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
<FilesMatch (core.c)
        Container for directives affecting files matching specified patterns
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
AuthType (core.c)
        An HTTP authorization type (e.g., "Basic")
        Allowed in *.conf only inside <Directory>, <Files> or <Location> and in .htaccess
        when AllowOverride includes AuthConfig
AuthName (core.c)
        The authentication realm (e.g. "Members Only")
        Allowed in *.conf only inside <Directory>, <Files> or <Location> and in .htaccess
        when AllowOverride includes AuthConfig
Require (core.c)
        Selects which authenticated users or groups may access a protected space
        Allowed in *.conf only inside <Directory>, <Files> or <Location> and in .htaccess
        when AllowOverride includes AuthConfig
Satisfy (core.c)
        access policy if both allow and require used ('all' or 'any')
        Allowed in *.conf only inside <Directory>, <Files> or <Location> and in .htaccess
        when AllowOverride includes AuthConfig
AddDefaultCharset (core.c)
        The name of the default charset to add to any Content-Type without one or 'Off' to disable
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
AcceptPathInfo (core.c)
        Set to on or off for PATH_INFO to be accepted by handlers, or default for the per-handler preference
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
AccessFileName (core.c)
        Name(s) of per-directory config files (default: .htaccess)
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
DocumentRoot (core.c)
        Root directory of the document tree
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ErrorDocument (core.c)
        Change responses for HTTP errors
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
AllowOverride (core.c)
        Controls what groups of directives can be configured by per-directory config files
        Allowed in *.conf only inside <Directory>, <Files> or <Location>
Options (core.c)
        Set a number of attributes for a given directory
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes Options
DefaultType (core.c)
        the default MIME type for untypable files
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
FileETag (core.c)
        Specify components used to construct a file's ETag
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
EnableMMAP (core.c)
        Controls whether memory-mapping may be used to read files
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
EnableSendfile (core.c)
        Controls whether sendfile may be used to transmit files
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
Protocol (core.c)
        Set the Protocol for httpd to use.
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
AcceptFilter (core.c)
        Set the Accept Filter to use for a protocol
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
Port (core.c)
        Port was replaced with Listen in Apache 2.0
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
HostnameLookups (core.c)
        "on" to enable, "off" to disable reverse DNS lookups, or "double" to enable double-reverse DNS lookups
        Allowed in *.conf anywhere
ServerAdmin (core.c)
        The email address of the server administrator
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ServerName (core.c)
        The hostname and port of the server
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ServerSignature (core.c)
        En-/disable server signature (on|off|email)
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
ServerRoot (core.c)
        Common directory of server-related files (logs, confs, etc.)
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
        The filename of the error log
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ServerAlias (core.c)
        A name or names alternately used to access the server
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ServerPath (core.c)
        The pathname the server can be reached at
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
Timeout (core.c)
        Timeout duration (sec)
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ContentDigest (core.c)
        whether or not to send a Content-MD5 header with each request
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes Options
UseCanonicalName (core.c)
        How to work out the ServerName : Port when constructing URLs
        Allowed in *.conf anywhere
UseCanonicalPhysicalPort (core.c)
        Whether to use the physical Port when constructing URLs
        Allowed in *.conf anywhere
Include (core.c)
        Name of the config file to be included
        Allowed in *.conf anywhere
LogLevel (core.c)
        Level of verbosity in error logging
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
NameVirtualHost (core.c)
        A numeric IP address:port, or the name of a host
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ServerTokens (core.c)
        Determine tokens displayed in the Server: header - Min(imal), OS or Full
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
LimitRequestLine (core.c)
        Limit on maximum size of an HTTP request line
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
LimitRequestFieldsize (core.c)
        Limit on maximum size of an HTTP request header field
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
LimitRequestFields (core.c)
        Limit (0 = unlimited) on max number of header fields in a request message
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
LimitRequestBody (core.c)
        Limit (in bytes) on maximum size of request message body
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
LimitXMLRequestBody (core.c)
        Limit (in bytes) on maximum size of an XML-based request body
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
RLimitCPU (core.c)
        Soft/hard limits for max CPU usage in seconds
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
RLimitMEM (core.c)
        Soft/hard limits for max memory usage per process
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
RLimitNPROC (core.c)
        soft/hard limits for max number of processes per uid
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride isn't None
LimitInternalRecursion (core.c)
        maximum recursion depth of internal redirects and subrequests
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ForceType (core.c)
        a mime type that overrides other configured type
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
SetHandler (core.c)
        a handler name that overrides any other configured handler
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
SetOutputFilter (core.c)
        filter (or ; delimited list of filters) to be run on the request content
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
SetInputFilter (core.c)
        filter (or ; delimited list of filters) to be run on the request body
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
AddOutputFilterByType (core.c)
        output filter name followed by one or more content-types
        Allowed in *.conf anywhere and in .htaccess
        when AllowOverride includes FileInfo
AllowEncodedSlashes (core.c)
        Allow URLs containing '/' encoded as '%2F'
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
PidFile (core.c)
        A file for logging the server process ID
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ScoreBoardFile (core.c)
        A file for Apache to maintain runtime process management information
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
LockFile (core.c)
        The lockfile used when Apache needs to lock the accept() call
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
MaxRequestsPerChild (core.c)
        Maximum number of requests a particular child serves before dying.
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
CoreDumpDirectory (core.c)
        The location of the directory Apache changes to before dumping core
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
AcceptMutex (core.c)
        Valid accept mutexes for this platform and MPM are: default, flock, fcntl, sysvsem, pthread.
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
MaxMemFree (core.c)
        Maximum number of 1k blocks a particular childs allocator may hold.
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
TraceEnable (core.c)
        'on' (default), 'off' or 'extended' to trace request body content
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
CustomLog (mod_log_config.c)
        a file name, a custom log format string or format name, and an optional "env=" clause (see docs)
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
TransferLog (mod_log_config.c)
        the filename of the access log
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
LogFormat (mod_log_config.c)
        a log format string (see docs) and an optional format name
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
CookieLog (mod_log_config.c)
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
LogFormat (mod_log_config.c)
        a log format string (see docs) and an optional format name
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
CookieLog (mod_log_config.c)
        the filename of the cookie log
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
BufferedLogs (mod_log_config.c)
        Enable Buffered Logging (experimental)
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
User (prefork.c)
        Effective user id for this server
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
Group (prefork.c)
        Effective group id for this server
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ListenBacklog (prefork.c)
        Maximum length of the queue of pending connections, as used by listen(2)
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
Listen (prefork.c)
        A port number or a numeric IP address and a port number, and an optional protocol
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
SendBufferSize (prefork.c)
        Send buffer size in bytes
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ReceiveBufferSize (prefork.c)
        Receive buffer size in bytes
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
StartServers (prefork.c)
        Number of child processes launched at server startup
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
MinSpareServers (prefork.c)
        Minimum number of idle children, to handle request spikes
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
MaxSpareServers (prefork.c)
        Maximum number of idle children
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
MaxClients (prefork.c)
        Maximum number of children alive at the same time
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
ServerLimit (prefork.c)
        Maximum value of MaxClients for this run of Apache
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
GracefulShutdownTimeout (prefork.c)
        Maximum time in seconds to wait for child processes to complete transactions during shutdown
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
KeepAliveTimeout (http_core.c)
        Keep-Alive timeout duration (sec)
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
MaxKeepAliveRequests (http_core.c)
        Maximum number of Keep-Alive requests per connection, or 0 for infinite
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
KeepAlive (http_core.c)
        Whether persistent connections should be On or Off
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
LoadModule (mod_so.c)
        a module name and the name of a shared object file to load it from
        Allowed in *.conf only outside <Directory>, <Files> or <Location>
LoadFile (mod_so.c)
        shared object file or library to load into the server at runtime
        Allowed in *.conf only outside <Directory>, <Files> or <Location>