La configuration d'un serveur Apache.

Nous présentons ici les principales directives du fichier de configuration principal d'un serveur Apache.

Les lignes commençant par le caractère "#" dans les fichiers de configuration sont des commentaires.

Nous nous baserons sur le fichier de configuration de sca-2 disponible ici:

fichier httpd.conf de sca-2.

Nous présenterons par ordre d'apparition les principales directives. Celles-ci sont regroupées en trois sections:

  1. Les directives de configuration du processus serveur,
  2. Les directives de configuration du serveur principal (par opposition aux serveurs virtuels),
  3. Les directives de configuration des serveurs virtuels.

La configuration du processus serveur.

ServerType

Cette directive indique si le serveur web tourne en permanence (valeur standalone) ou s'il est lancé par le démon inetd (valeur inetd) lors des requêtes.

Il arrive fréquement qu'une machine héberge plusieurs types de serveurs (ftp, web, telnet, pop, ...). Si tous les processus de ces serveurs tournent en permanence, ils utilisent les ressources de la machine même s'ils sont la plupart du temps uniquement en attente de connection. Pour éviter cela, on peut utiliser un seul processus, le "super-démon" inetd, qui va se mettre à l'écoute sur les différents port tcp utilisés par les différents serveurs. Une fois qu'une requête de connection a lieu sur un de ces ports, inetd lance le serveur correspondant au port où a eu lieu la requête et lui passe la main. L'utilisation d'inetd est surtout utile avec le serveur apache si le serveur n'est pas souvent sollicité. Sinon, l'utilisation de inetd peut diminuer le temps de réponse du serveur et les performances de la machine en général.

ServerRoot

Cette directive indique l'emplacement du répertoire racine du serveur. Les chemins relatifs (ne commençant pas par "/") indiqués ultérieurement seront considérés comme relatifs à ce répertoire.

Attention à ne pas confondre avec DocumentRoot qui indique la racine des documents délivrés par le serveur.

PidFile

Cette directive indique l'emplacement où le serveur stocke son n° de processus.

ResourceConfig

Cette directive indique l'emplacement du fichier de directive lu après le fichier de configuration principal (par défaut "conf/srm.conf").

AccessConfig

Cette directive indique l'emplacement du fichier de directive lu après le fichier ResourceConfig (par défaut conf/access.conf").

TimeOut

Cette directive indique le temps d'attente maximum en seconde, pour la réception d'une requête GET après établissement de la connection TCP. Ce délai expiré, la connexion est fermée.

C'est aussi le temps d'attente maximum entre la réception de 2 paquets TCP d'une requête POST ou PUT.

KeepAlive

Cette directive indique si le serveur accepte (on) ou non (off) les requêtes Keep-Alive.

KeepAliveTimeout

Cette directive indique le temps d'attente maximum en secondes entre deux requêtes sur une connexion Keep-Alive avant fermeture de cette connection.

MaxKeepAliveRequests

Cette directive indique le nombre maximum de requêtes sur une connexion Keep-Alive" avant fermeture de cette connexion. La valeur 0 indique un nombre infini.

MinSpareServers et MaxSpareServers

Ces directives indiquent respectivement les nombres minimum et maximum de processus de service en attente. Si le nombre de processus de service tombe sous MinSpareServers, de nouveau processus sont créés pour atteindre MinSpareServers. Si le nombre de processus en attente dépasse MaxSpareServers, des processus sont tués pour atteindre MaxSpareServers.

StartServers

Nombre de processus de service à créer au démarrage du serveur.

MaxClients

Cette directive indique le nombres maximum de processus de services existant simultanément. Si une requête arrive alors que MaxClients processus sont actifs (en train de répondre à une requête). La requête est mise en attente jusqu'à ce qu'un processus se libère.

MaxRequestPerChild

Cette directive indique le nombre de requêtes par processus de service avant qu'il ne meure. La valeur 0 indique une infinité. Limiter le nombre de requêtes permet d'éviter sur certains systèmes les pertes de mémoire occasionnées par des processus qui alloueraient de la mémoire sans la restituer.

Listen

Cette directive indique les interfaces et les ports sur lesquels le serveur est à l'écoute des requêtes. Par défaut, le serveur écoute sur tous les interfaces IP, sur le port indiqué par la directive Port (voir plus loin). Pour indiquer plusieurs ports, on utilise plusieurs directives Listen.

Exemple:


Listen 8000

Listen 9999

Dans cet exemple, le serveur écoute uniquement sur les ports 8000 et 9999.

Si on spécifie des adresses IP et des ports dans des directives Listen pour une machine disposant de plusieurs interfaces, le serveur écoutera uniquement sur ces interfaces et ports.

Exemple:


Listen 123.45.67.89:6666

Listen 111.11.11.11:2222

BinAdrress

Cette directive indique l'interface sur lequel le serveur écoute. Si la valeur est "*", le serveur écoute sur tous les interfaces. Sinon, il écoute sur l'interface correspondant à l'adresse IP spécifiée. Le port d'écoute est celui indiqué par Port.

Les modules.

Les fonctionnalités d'un serveur apache peuvent être étendues à l'aide d'une série de modules intégrés statiquement au serveur lors de la compilation ou chargeables dynamiquement lors du lancement (ou relancement) du serveur.

Il existe des spécifications pour le développement de modules Apache.

Parmi les fonctionnalités que l'on peut ajouter au service de base du serveur, citons par exemple les possibilités de transformer le serveur en proxy, de corriger automatiquement des URL mal orthographiées par les utilisateurs, d'intégrer au serveur des interpréteurs de langages tels que Perl, PHP, ... pour rendre plus efficace l'exécution de programmes CGI écrit dans ces langages, ...

Une fois un module chargé par le serveur Apache, le module peut être configuré à l'aide de directives qui lui sont spécifiques dans le fichier de configuration du serveur.

LoadModule

Cette directive permet de charger dynamiquement un module.

Exemple:


LoadModule proxy_module       /usr/apache/libexec/libproxy.so

LoadModule speling_module     /usr/apache/libexec/mod_speling.so

Les noms "proxy_module" et "speling_module" permettront de référencer le module par la suite.

ClearModuleList

Cette directive permet d'effacer la liste des modules actifs.

AddModule

Cette directive permet d'ajouter à la liste des modules actifs un module particulier.

La configuration du serveur "principal".

Les directives qui suivent concernent la configuration du serveur pour la réponse aux requêtes qui ne concernent pas un serveur virtuel (virtual host).

La technique des virtual hosts permet d'héberger sur un serveur apache des sites correspondant à des noms de machine différents. Deux noms différents peuvent correspondre à la même IP. Soit par exemple wwww.domaine1.org et www.domaine2.org deux noms correspondant à la même IP. Avec la technique des serveurs virtuels, il est possible d'obtenir deux page différentes pour les URL http://www.domaine1.org et http://www.domaine2.org même si ces deux URL correspondent à des requêtes envoyées à la même adresse IP et sur le même Port. Pour distinguer les deux requêtes, le serveur utilise le header Host de la requête IP.

La configuration des serveurs virtuels intervient à la fin du fichier de configuration et sera abordée plus tard. Les directives indiquées dans cette section peuvent également apparaître dans la configuration d'un serveur virtuel.

Port

Cette directive indique le port d'écoute du serveur.

User et Group

Cette directive indique le nom d'utilisateur et le groupe sous lesquels les processus de service vont tourner. Elle ne fonctionne que si le serveur principal est lancé sous le nom de root. Il s'agit d'un aspect critique de la sécurité d'un serveur car les progammes CGI seront exécutés sous ces noms d'utilisateur et de groupe.

ServerAdmin

Cette directive indique l'adresse e-mail de l'administrateur du serveur. Cette information est ajoutée automatiquement à certaines pages générées automatiquement par le serveur.

ServerName

Cette directive indique le nom du serveur.

DocumentRoot

Cette directive indique l'emplacement du répertoire qui sert de racine aux documents du serveur, c'est-à-dire par rapport auquel sont considérés les chemins indiqués dans les URL.

<Directory nomRépertoire>...<Directory>

Ces deux "balises" entourent des directives qui contrôlent les possibilités permises dans le répertoire indiqué dans la première balise. Le nom de répertoire peut contenir des expressions régulières de style Unix pour désigner plusieurs répertoires.

Il y a héritage des directives pour les sous-répertoires du répertoire indiqué dans Directory, sauf si ces directives sont redéfinies dans un section Directory pour ces sous-répertoires. Il est de plus possible de placer dans un répertoire un fichier particulier contenant des directives (voir AccessFileName) à lui appliquer, ce qui permet par exemple à un utilisateur de personnaliser les répertoires de son site.

Les possibilités permises dans un répertoire sont donc une combinaison des possibilités indiquées pour ses parents et pour lui même ainsi que de son fichier AccessFileName et de celui de ses parents.

Options

Cette directive indique une liste de "fonctionnalités" du serveur autorisée dans le répertoire.

Ces fonctionnalités peuvent être:

FollowSymLinks
la possibilité de suivre les liens symboliques dans le répertoire,
ExecCGI
la possibilité d'exécuter des programmes CGI dans ce répertoire,
Includes
la possibilité d'utiliser les Server Side Includes (SSI) dans ce répertoire,
Indexes
la possibilité d'afficher la liste des fichiers du répertoire quand l'URL ne contient pas de nom de fichier et qu'il n'y a pas de fichier d'index (voir DirectoryIndex),
All
tout.
...

AllowOverride

Cette directive indique quelles directives du fichier d'accès peuvent "écraser" celles du fichier de configuration pour ce répertoire.

La valeur "none" signifie aucune, la valeur Options signifie que l'on peut redéfinir dans le fichier d'accès les options vue ci-dessus, ...

Order

Cette directive indique l'ordre des directives d'évaluation des directives Allow et Deny qui accorde ou interdisent l'accès du répertoire à certaines machines selon leur IP ou leur nom.

Allow from

Cette directive indique quelles machines clientes ont accès aux documents du répertoire. La valeur peut-être "all" pour toutes les machines, un nom ou un nom de domaine éventuellement partiel, une adresse IP, un sous-réseau donné par une IP et un masque.

Deny from

Idem mais pour interdir l'accès au répertoire.

UserDir

Cette directive indique le nom du répertoire dans le home directory d'un utilisateur où doivent être placés les fichiers pour pouvoir y accéder avec des URL de la forme:


http://nomServeur.org/~loginName/fichier.html

DirectoryIndex

Cette directive indique le nom du fichier d'un répertoire qui sera retourné dans la réponse si le chemin dans l'URL ne correspond pas à un fichier mais à ce répertoire. On peut mettre plusieurs noms séparées pas des espaces.

AccessFileName

Cette directive indique le nom du fichier à placer dans un répertoire pour indiquer les options de ce répertoire à condition que AllowOverride n'ait pas la valeur none pour ce répertoire.

Le fichier d'accès peut contenir les mêmes directives que le fichier de configuration pour limiter les possibilités dans ce répertoire (ex: allow, options, ...).

Un sous-répertoire "hérite" des fichiers d'accès des répertoire qui le contiennent, auquel s'ajoutent les directives de son propre fichier d'accès.

TypesConfig

Cette directive indique indique l'emplacement du fichier qui contient la correspondance entre extension d'un fichier et son type MIME qui est retournée dans l'en-tête HTTP lors de l'envoi du fichier.

Le fichier contient ces information sous la forme d'une suite de lignes:


typeMIME  ext1 ext2 ...

Exemple:


image/jpeg          jpeg jpg jpe

text/html           html htm

text/plain          asc txt

application/pdf     pdf

DefaultType

Cette directive indique le type MIME retourné pour un document si le serveur ne peut le déterminer (par consultation du fichier TypesConfig, via le module mod_mime_magic, ou par ses propres directives).

ErrorLog

Cette directive indique l'emplacement du fichier d'erreurs où le serveur stocke les messages d'erreur, par exemple, les URL de fichiers URL inexistants, les requêtes erronées, ...

LogLevel

Cette directive indique le niveau d'importance des messages enregistrés dans le fichier ErrorLog (debuf, info, ...).

LogFormat

Cette directive définit le format des messages enregistrés dans le fichier dans le fichiers CustomLog qui archive les accès (voir plus loin).

Une définition de format fait intervenir une série de codes par exemple:
%h nom de l'hôte distant
%r première ligne de la requête
%{User-agent} nom du navigateur

La directive LogFormat permet d'attribuer un nom à un format. On peut indiquer plusieurs directives LogFormat.

Exemple:


LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

CustomLog

Cette directive indique l'emplacement du fichier de log des accès et le format d'enregistrement des messages.

Exemple:


CustomLog logs/access_log common

ServerSignature

Cette directive, si sa valeur est "on", permet d'afficher la version du serveur dans certaines pages générées automatiquement. Si la valeur est "EMail", l'adresse e-mail de ServerAdmin sera aussi affichée.

Alias

Cette directive permet de créer des alias pour des répertoires.

Le format est le suivant:


Alias nomAlias nomRéel

Exemple:


Alias /img/ "/usr/local/Images/"

Lors d'une requête de la forme http://nomServeur.org/img/nomFichier.jpg, le serveur retourne le fichier "nomFichier.jpg" du répertoire /usr/local/Images/.

ScriptAlias

Idem mais spécifique aux répertoires contenant des scripts CGI.

Redirect

Cette directive permet de rediriger une URL vers une autre, par exemple, en cas de déplacement d'une page.

Exemple:


Redirect /msi/confApache.html http://sca-2.ulb.ac.be/msi/Apache/conf.html

IndexOptions

Cette directive spécifie le format d'affichage de la liste des fichiers d'un répertoire lorsqu'une URL ne contient pas de nom de fichier mais uniquement le chemin d'un répertoire et qu'il n'y a pas de fichier DirectoryIndex dans ce répertoire.

La valeur FancyIndexing permet d'avoir une liste de fichiers avec une icône différente selon leur type, leur taille, leur date de dernière modification, ...

On peut indiquer les informations à afficher en spécifiant une liste de valeurs après FancyIndexing, par exemple SuppressSize pour ne pas afficher la taille, ScanHTMLTitles pour afficher le titre (TITLE) d'un document HTML.

Les directives AddIcon

AddIconByEncoding

Cette directive permet d'indiquer le fichier contenant l'icône à afficher dans le listing d'un répertoire (fichier png, gif, jpeg, ..) pour les documents selon leur type MIME.

Exemple:


AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

Le texte "CMP", est le texte valeur de l'attribut ALT qui est affiché par les navigateurs non graphiques ou qui apparaît sous forme d'info-bulle quand la souris passe sur l'image.

AddIconByType

Cette directive a un comportement identique mais permet de spécifier l'icône pour plusieurs types MIME en une fois grâce à l'utilisation du caractère joker "*".

Exemple:


AddIconByType (IMG,/icons/image.xbm) image/*

AddIcon

Cette directive permet d'indiquer l'icône d'un fichier en fonction de son nom ou extension.

Exemple:


AddIcon /icons/binary.gif .bin .exe

DefaultIcon

Cette directive indique l'icône utilisée lorsque le fichier n'entre dans aucune catégorie définie par les directives de type AddIcon.

Exemple:


DefaultIcon /icon/unknown.xbm

AddDescription

Cette directive permet d'indiquer une courte description du type de fichier selon son nom ou son extension.

Exemple:


AddDescription "Dernière version du programme" /pub/xyz1.2.3.tgz

AddDescription "archive au format tar" .tar

ReadmeName et HeaderName

Cette directive indique le nom des fichiers à ajouter avant(HeaderName) ou après(ReadmeName) le listing des fichiers d'un répertoire.

IndexIgnore

Cette directive permet de spécifier une liste de fichiers à exclure du listing des fichiers des répertoires.

AddType

Cette directive permet d'ajouter à l'intérieur du fichier de configuration des types MIME en plus de ceux du fichier TypeConfig.

AddHandler

Cette directive permet d'associer un "handler" à des fichiers selon leur extension. Un handler permet d'appeler une action quand un fichier est demandé au serveur. Les handlers peuvent être intégrer au serveur ou dans un module ou être une application externe (voir Action).

Les handlers sont généralement utilisés pour effectuer un traitement sur un fichier avant de l'envoyer au client. C'est notamment le cas lors de l'utilisation de SSI où le serveur remplace certains codes présents dans un document par des valeurs dynamiques (date du jour, ...) ou encore lors de l'invocation d'un programme CGI écrit dans un langage intérpété où le serveur lance automatiquement l'interpréteur et lui communique l'emplacement du fichier source spécifié dans l'URL.

Action

Cette directive indique le handler à exécuter pour les documents d'un type MIME donné.

Exemple:


AddType application/x-httpd-php4 .php4

Action application/x-httpd-php4 "/php4/php.exe"

La première ligne définit le type MIME "application/x-httpd-php4" pour les fichiers d'extension ".php4". La seconde ligne provoque l'exécution du programme "/php4/php.exe" quand un fichier de type "application/x-httpd-php4", c-à-d portant l'extension ".php4" est demandé. Le programme "/php4/php.exe" reçoit via des variables d'environnement le chemin vers le fichier demandé dans la requête.

ErrorDocument

Cette directive permet de personnaliser les messages d'erreur selon le type (n°) d'erreurs.

Apache offre 3 possibilités pour les messages d'erreur:

  1. Format texte brut
    Exemple:

    ErrorDocument 404 "Document non trouvé

    Le caractère (") n'est pas affiché, il sert à signaler qu'il s'agit d'un message texte.

  2. Redirection locale
    Exemple:

    ErrorDocument 404 /error/404.html

  3. Redirection externe
  4. Exemple:

    ErrorDocument 404 http://serveur.org/repertoire/fichier.html

Les serveurs virtuels.

La dernière partie du fichier de configuration contient la définition des serveurs virtuels (virtual hosts).

Les directives de cette partie ainsi que d'autres passées sous silence ici seront abordées plus tard.

Références

La documentation complète du serveur Apache est disponible à l'adresse:

http://www.apache.org/docs