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:
Nous présenterons par ordre d'apparition les principales directives. Celles-ci sont regroupées en trois sections:
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.
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.
Cette directive indique l'emplacement où le serveur stocke son n° de processus.
Cette directive indique l'emplacement du fichier de directive lu après le fichier de configuration principal (par défaut "conf/srm.conf").
Cette directive indique l'emplacement du fichier de directive lu après le fichier ResourceConfig (par défaut conf/access.conf").
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.
Cette directive indique si le serveur accepte (on) ou non (off) les requêtes Keep-Alive.
Cette directive indique le temps d'attente maximum en secondes entre deux requêtes sur une connexion Keep-Alive avant fermeture de cette connection.
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.
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.
Nombre de processus de service à créer au démarrage du serveur.
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.
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.
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
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 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.
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.
Cette directive permet d'effacer la liste des modules actifs.
Cette directive permet d'ajouter à la liste des modules actifs un module particulier.
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.
Cette directive indique le port d'écoute du serveur.
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.
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.
Cette directive indique le nom du serveur.
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.
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.
Cette directive indique une liste de "fonctionnalités" du serveur autorisée dans le répertoire.
Ces fonctionnalités peuvent être:
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, ...
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.
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.
Idem mais pour interdir l'accès au répertoire.
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
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.
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.
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
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).
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, ...
Cette directive indique le niveau d'importance des messages enregistrés dans le fichier ErrorLog (debuf, info, ...).
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
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
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.
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/.
Idem mais spécifique aux répertoires contenant des scripts CGI.
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
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.
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.
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/*
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
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
Cette directive permet d'indiquer une courte description du type de fichier selon son nom ou son extension.
AddDescription "Dernière version du programme" /pub/xyz1.2.3.tgz AddDescription "archive au format tar" .tar
Cette directive indique le nom des fichiers à ajouter avant(HeaderName) ou après(ReadmeName) le listing des fichiers d'un répertoire.
Cette directive permet de spécifier une liste de fichiers à exclure du listing des fichiers des répertoires.
Cette directive permet d'ajouter à l'intérieur du fichier de configuration des types MIME en plus de ceux du fichier TypeConfig.
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.
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.
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:
ErrorDocument 404 "Document non trouvé
ErrorDocument 404 /error/404.html
ErrorDocument 404 http://serveur.org/repertoire/fichier.html
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.
La documentation complète du serveur Apache est disponible à l'adresse:
http://www.apache.org/docs