Il y a des documents qu'on ouvre une fois et qu'on finit par consulter tous les jours sans même s'en rendre compte. Le document de référence rapide des directives d'Apache HTTP Server appartient clairement à cette catégorie. Quand je configure un nouveau serveur, quand je dépanne une configuration héritée d'un collègue parti depuis longtemps, quand je me demande si une directive accepte vraiment le contexte « directory » ou seulement le contexte serveur virtuel, c'est vers cette table que je reviens. Elle tient sur une page, elle paraît austère, et pourtant elle contient l'essentiel de ce qu'il faut savoir pour ne pas casser un httpd en production. Dans ce guide, je vous propose de la lire ensemble, colonne par colonne, en expliquant ce que chaque symbole signifie et comment en tirer le maximum au quotidien. Parce qu'une référence bien comprise vaut mieux que dix copies de tutoriels approximatifs trouvés au hasard.
Le principe de cette table est simple : chaque ligne décrit une directive, avec son usage, sa valeur par défaut éventuelle, les contextes où elle s'applique et son statut. Rien de plus, rien de moins. Mais derrière cette apparente simplicité se cache une logique de conception qui remonte aux débuts du serveur et qui reste étonnamment cohérente aujourd'hui. Une directive mal placée ne produit pas toujours une erreur explicite : parfois elle est simplement ignorée, ce qui est bien pire. Vous croyez avoir durci un répertoire, et en réalité votre règle n'a jamais été lue. C'est exactement le genre de piège qu'une lecture attentive de la référence permet d'éviter. Et c'est aussi la raison pour laquelle je considère ce document comme un outil de sécurité autant que de configuration.
Qu'est-ce qu'une directive Apache, au juste ?
Une directive, c'est une instruction que le serveur lit dans ses fichiers de configuration et qui modifie son comportement. Certaines sont très concrètes, comme Listen qui indique sur quel port et quelle adresse le serveur attend les connexions. D'autres sont plus abstraites, comme Require qui définit les règles d'autorisation d'accès. Le serveur charge l'ensemble au démarrage, dans l'ordre, et la dernière directive gagne souvent quand plusieurs s'appliquent au même objet. Ce mécanisme d'héritage et de priorité explique pourquoi deux configurations identiques en apparence peuvent produire des résultats différents selon l'endroit où elles sont écrites. J'ai vu des administrateurs se battre pendant des heures sur un problème qui venait simplement d'une directive placée dans un .htaccess alors qu'elle aurait dû être dans le fichier principal.
Directives simples versus directives de section
Toutes les directives ne se ressemblent pas. Les directives simples tiennent sur une ligne, comme ServerName ou DocumentRoot. Les directives de section, elles, ouvrent un bloc délimité par des balises, comme <VirtualHost>, <Directory>, <Location> ou <IfModule>, et tout ce qui se trouve à l'intérieur hérite du contexte de la section. Cette distinction est fondamentale, parce que les contextes indiqués dans la table de référence dépendent précisément de ces sections. Une directive marquée « d » pour directory n'a de sens qu'à l'intérieur d'un bloc <Directory> ou d'un fichier .htaccess. Si vous l'écrivez ailleurs, Apache la rejettera au démarrage ou l'ignorera silencieusement selon les cas. Autant dire qu'apprendre à reconnaître ces deux familles vous fera gagner un temps considérable.
Arguments, valeurs par défaut et héritage entre contextes
Chaque directive attend un ou plusieurs arguments, et la référence précise leur nature entre crochets ou par des noms explicites comme « nom-de-fichier » ou « type MIME ». Quand une valeur par défaut existe, elle est affichée dans la deuxième colonne ; si elle est trop longue, elle se termine par un « + » et il faut consulter la fiche détaillée pour la voir en entier. Ce détail paraît anecdotique, mais il m'a souvent évité des surprises. Prenez AddDefaultCharset : sa valeur par défaut n'est ni vide ni neutre, et elle peut ajouter un en-tête de jeu de caractères que vous ne souhaitiez pas. L'héritage, lui, fonctionne du plus général au plus spécifique, ce qui veut dire qu'une valeur définie au niveau global peut être surchargée dans un serveur virtuel, puis à nouveau dans un répertoire. Une bonne configuration exploite cette cascade au lieu de la subir.
Lire la table de référence : les quatre colonnes qui font gagner du temps
La structure de la table est constante, et c'est précisément ce qui la rend rapide à parcourir. On y trouve le nom de la directive et son usage, la valeur par défaut quand elle existe, les contextes applicables et le statut. Une fois que vous avez intégré cette grille de lecture, vous trouvez une information en quelques secondes au lieu de fouiller dans une dizaine de pages de manuel. Je vous conseille d'ailleurs de garder la page ouverte dans un onglet fixe du navigateur quand vous travaillez sur une configuration délicate. C'est un réflexe simple, mais il change vraiment la donne quand on enchaîne les itérations sur un fichier httpd.conf.
Colonne 1 : le nom de la directive et son usage
La première colonne affiche le nom exact de la directive, en respectant la casse officielle, suivie d'une description courte de ce qu'elle fait. Cette description n'est pas un manuel, c'est une accroche, mais elle suffit souvent à confirmer qu'on est sur la bonne piste. Par exemple, à la ligne AccessFileName, on lit immédiatement qu'il s'agit du nom du fichier de configuration distribué, c'est-à-dire le fameux .htaccess. Un coup d'œil suffit pour vérifier qu'on ne confond pas avec AccessConfig ou une autre directive voisine. Les noms se ressemblent parfois dangereusement, et la table aide justement à ne pas se tromper de ligne. Si vous devez chercher une directive, faites-le toujours par le nom exact plutôt que par le concept : c'est plus fiable et plus rapide.
Colonne 2 : la valeur par défaut (et le fameux « + » de troncature)
La deuxième colonne indique la valeur par défaut, ce qui est souvent l'information la plus utile quand on hérite d'une configuration et qu'on ne sait pas ce qui s'applique réellement. Si vous ne voyez rien, c'est qu'il n'y a pas de valeur par défaut ou que celle-ci dépend d'un autre réglage. Si vous voyez un « + » en fin de chaîne, la valeur est trop longue pour être affichée dans la table et il faut consulter la page de la directive pour la voir en intégralité. Ne négligez pas ce détail : certaines valeurs par défaut sont très permissives, d'autres sont restrictives, et partir du mauvais postulat conduit à des diagnostics complètement faux. J'ai vu des gens accuser un module de tous les maux alors qu'une valeur par défaut héritée expliquait tout.
Colonne 3 : les contextes d'application expliqués lettre par lettre
La troisième colonne liste les contextes sous forme d'abréviations d'une ou deux lettres, et c'est probablement la partie la plus mal lue de tout le document. Pourtant, elle détermine où vous avez le droit d'écrire la directive. Un contexte mal respecté, et la directive est ignorée, ce qui produit parfois des comportements de sécurité très fâcheux. Voici la correspondance officielle, à garder sous la main :
- s : configuration globale du serveur, c'est-à-dire le fichier principal hors de toute section
- v : serveur virtuel, à l'intérieur d'un bloc
<VirtualHost> - d : répertoire, dans un bloc
<Directory>,<Location>,<Files>ou un fichier.htaccessselon les cas - h : fichier
.htaccessuniquement, contexte distribué - p : section proxy, dans un bloc
<Proxy>
Quand une directive accepte plusieurs contextes, ils sont listés sans séparateur, par exemple « sv » pour global et serveur virtuel. Il faut donc lire chaque lettre séparément, et non comme un mot. Ce point paraît trivial, mais il m'a fallu un moment, au début, pour comprendre que « sv » n'était pas une abréviation unique. Une fois le réflexe acquis, la lecture devient instantanée.
Le tableau des légendes en clair
La quatrième colonne utilise des lettres de statut qui renvoient à une légende affichée au-dessus de la table. Si vous ne l'avez jamais regardée, vous passez à côté d'une information précieuse sur la nature du module qui fournit la directive. Voici la synthèse que j'utilise personnellement :
| Symbole | Signification | Ce que ça implique pour vous |
|---|---|---|
| C | Noyau httpd | Directive disponible sans charger de module supplémentaire |
| M | Module standard | Nécessite le chargement du module correspondant |
| B | Module de base | Fournie par mod_base, très souvent active par défaut |
| E | Expérimental | À utiliser avec prudence, l'API peut évoluer |
| X | Externe | Provient d'un module tiers, non maintenu par le projet |
| T | Tiers | Également hors du périmètre officiel, vérifiez la maintenance |
Contextes : s, v, d, h et p — qui contrôle quoi
La hiérarchie des contextes suit une logique de portée décroissante. Le contexte global couvre tout le serveur, le contexte serveur virtuel couvre un hôte, le contexte répertoire couvre un chemin, et le contexte .htaccess couvre un répertoire distribué sur lequel un utilisateur peut agir sans redémarrer le serveur. La section proxy, plus spécialisée, concerne les requêtes relayées vers un backend. Comprendre cette cascade, c'est comprendre pourquoi certaines directives ne marchent pas là où on les a mises. Par exemple, une directive réservée au contexte répertoire ne fonctionnera jamais dans un fichier global, aussi logique que cela puisse paraître sur le papier. Une fois cette règle assimilée, la moitié des erreurs de configuration disparaît d'elle-même.
Statuts : C, M, B, E, X et T décryptés
Le statut vous dit d'où vient la directive et donc quelle est sa robustesse dans le temps. Une directive de noyau ne dépend d'aucun module : elle fonctionne toujours. Une directive de module exige que le module soit chargé, ce qui explique pourquoi certaines configurations fonctionnent sur un serveur et pas sur un autre. Les statuts E, X et T doivent vous alerter, non pas parce que ces modules seraient mauvais, mais parce qu'ils ne bénéficient pas des mêmes garanties de stabilité. Avant de fonder une architecture sur une directive expérimentale, demandez-vous si vous pourrez la maintenir dans trois ans. C'est une question banale qui évite bien des réécritures.
Les directives du noyau httpd à connaître par cœur
Parmi les directives du noyau, certaines reviennent dans presque toutes les configurations et méritent d'être connues sur le bout des doigts. AcceptFilter est un bon exemple : elle optimise la configuration d'une socket pour l'écoute d'un protocole donné et fonctionne uniquement en contexte global. Sur Linux, elle active l'acceptation différée au niveau du noyau, ce qui réduit le coût des connexions entrantes. Sur d'autres systèmes, son comportement diffère, et c'est précisément le genre de détail que la table signale sans entrer dans les détails. Vous savez ainsi immédiatement si vous devez creuser ou passer à la ligne suivante.
Réglages de sockets et de connexions : AcceptFilter et consorts
Les directives liées aux sockets sont peu nombreuses mais déterminantes sur les serveurs à fort trafic. Elles jouent sur la manière dont le système d'exploitation remonte les connexions au processus httpd, ce qui influence directement la latence perçue par les visiteurs. Si vous voyez des temps de réponse qui varient fortement sans raison apparente, cela vaut la peine d'aller regarder de ce côté. Attention toutefois : ces réglages interagissent avec la pile réseau du système, et un mauvais choix peut dégrader les performances au lieu de les améliorer. La référence vous indique au moins le contexte autorisé, ce qui évite de placer la directive n'importe où.
Fichiers de configuration distribués : AccessFileName et AllowOverride
AccessFileName définit le nom du fichier distribué, généralement .htaccess, et accepte plusieurs noms possibles. Elle s'applique en contexte global et serveur virtuel, ce qui laisse une certaine souplesse. Mais le nom seul ne suffit pas : c'est AllowOverride qui décide quelles directives les fichiers distribués sont autorisés à modifier, et cette directive se place en contexte répertoire. Ce duo est une source infinie de confusion, parce que beaucoup d'administrateurs activent AllowOverride All sans mesurer les conséquences. En pratique, chaque requête voit ses performances diminuer quand les fichiers distribués sont autorisés, puisque le serveur doit chercher ces fichiers à chaque appel. Réservez donc cette souplesse aux répertoires qui en ont vraiment besoin, et laissez le reste verrouillé.
Directives du module de base : fils de discussion, types MIME et indexation
Le module de base fournit une série de directives liées aux types MIME, aux encodages et aux index de répertoire. AddCharset associe des extensions de fichiers à un jeu de caractères, AddEncoding fait de même pour les codages, et AddHandler relie une extension à un gestionnaire. Ces trois directives fonctionnent dans les mêmes contextes et se combinent fréquemment. Je les utilise par exemple pour servir des fichiers .gz précompressés ou pour forcer un jeu de caractères sur des polices web. Ce sont des petites briques qui, bien assemblées, améliorent réellement l'expérience des visiteurs.
AddCharset, AddEncoding et AddHandler : maîtriser les associations de types
Le piège classique avec ces directives, c'est d'empiler les associations jusqu'à produire des conflits invisibles. Si un même type MIME est déclaré par plusieurs directives, l'ordre et la spécificité décident de la résolution. Mieux vaut vérifier le résultat avec un en-tête HTTP réel, par exemple en utilisant curl -I sur une ressource de test. Ne vous contentez jamais de supposer que ça marche : lisez la réponse. C'est un réflexe que je recommande à tous ceux qui débutent sur Apache, parce qu'il transforme la configuration en science expérimentale plutôt qu'en incantation. Et cela évite les mauvaises surprises le jour où un navigateur décide d'interpréter différemment un fichier servi correctement depuis des années.
AddAlt, AddDescription et les directives d'indexation automatique
Les directives AddAlt, AddAltByEncoding, AddAltByType et AddDescription servent à enrichir l'affichage des index générés automatiquement par mod_autoindex. Elles ajoutent un texte de remplacement aux icônes ou une description aux fichiers listés. C'est un détail, mais qui compte pour l'accessibilité et pour l'ergonomie d'un répertoire de téléchargement. AddAltByEncoding et AddAltByType permettent d'adapter le texte selon le codage ou le type MIME, ce qui évite d'écrire une directive par fichier. Ces fonctionnalités sont souvent oubliées des configurations modernes, au point qu'on finit par croire que l'index automatique n'est qu'une liste brute. Il peut pourtant être bien plus lisible avec quelques lignes.
Directives d'autorisation et de réécriture à repérer vite dans la table
Les directives d'autorisation et de réécriture sont parmi celles que l'on cherche le plus souvent dans la table, parce qu'elles conditionnent la sécurité et l'architecture d'un site. Sur ce terrain, la référence devient une boussole. Elle ne vous dit pas comment écrire la règle parfaite, mais elle vous confirme si vous pouvez l'écrire à cet endroit, avec ce module, sous ce nom. Et c'est déjà énorme quand on hérite d'une configuration ancienne qu'on doit moderniser sans tout casser.
De mod_access_compat à mod_authz_core : la bascule nécessaire
Depuis la version 2.4, les directives Allow, Deny et Order appartiennent à mod_access_compat, un module de compatibilité qui ne devrait plus servir de base à de nouvelles configurations. Le mécanisme moderne repose sur Require, fourni par mod_authz_core, qui fonctionne avec une logique plus claire et plus composable. La référence liste les deux, ce qui est pratique pour comprendre une configuration historique, mais il faut savoir laquelle choisir pour le futur. Si vous maintenez encore du code legacy, prévoyez une migration progressive. Les directives de compatibilité finiront probablement par disparaître, et personne ne regrettera les configurations où l'ordre des règles changeait tout.
RewriteRule, RewriteCond : ce qu'il faut vérifier avant de copier une règle
Les règles de réécriture circulent sur les forums avec un enthousiasme qui confine parfois à l'imprudence. Avant de coller une règle trouvée en ligne, vérifiez le contexte autorisé : RewriteRule fonctionne en contexte global et répertoire, mais son comportement diffère selon l'endroit. En contexte répertoire, le chemin de la requête est relatif au répertoire ; en contexte global, il commence par un slash. Cette nuance explique une bonne part des règles qui « marchent en local mais pas sur le serveur ». Et si vous utilisez plusieurs directives de réécriture, souvenez-vous qu'elles s'exécutent dans l'ordre, ce qui rend la lisibilité du fichier critique pour la maintenance.
Comparer les versions 2.4 et 2.2 directement dans la référence
Les versions 2.2 et 2.4 ont introduit des ruptures importantes, notamment dans le domaine de l'autorisation et de la gestion des connexions. Comparer les deux à travers la table de référence est instructif : on voit apparaître de nouvelles directives, d'autres passer en compatibilité, et quelques-unes être retirées. Ce travail de comparaison vaut mieux qu'un long article théorique, parce qu'il part de la donnée brute. Si vous migrez un parc de serveurs, c'est même la première chose que je ferais : dresser la liste des directives utilisées, puis vérifier leur statut dans la table 2.4. Vous obtenez ainsi une feuille de route concrète plutôt que des suppositions.
Identifier les directives marquées « obsolete » ou remplacées
Certaines directives restent dans la documentation pour référence mais ne sont plus recommandées. Elles continuent de fonctionner tant que le module correspondant est chargé, ce qui entretient une illusion de pérennité. Je vous conseille de tenir un fichier de notes personnel avec les directives que vous rencontrez et leur statut, parce que la mémoire seule est trompeuse. Au fil des mois, ce fichier devient une ressource précieuse pour vous et pour votre équipe. Et le jour où un collègue vous demande pourquoi telle directive est encore là, vous avez une réponse documentée.
Vérifier la disponibilité d'une directive selon le module chargé
Une directive peut être parfaitement valide et pourtant provoquer une erreur au démarrage si le module qui la fournit n'est pas chargé. C'est une cause fréquente d'échec lors d'une migration ou d'une installation minimale. La commande httpd -M liste les modules actifs, ce qui permet de vérifier rapidement la situation. Croisez ensuite avec la colonne statut de la table : vous savez immédiatement si la directive devrait être disponible. Ce double contrôle prend deux minutes et évite un redémarrage raté en production.
Vérifier sa configuration avant de la mettre en production
La meilleure configuration du monde ne vaut rien si elle n'est jamais testée. Apache propose plusieurs outils en ligne de commande qui permettent de valider un fichier avant de recharger le service. httpd -t effectue un contrôle de syntaxe et signale les erreurs bloquantes. httpd -S affiche la liste des serveurs virtuels et de leurs alias, ce qui révèle souvent des incohérences de noms. Et httpd -M, comme on l'a vu, donne la liste des modules chargés. Ces commandes devraient faire partie de votre routine, au même titre que la sauvegarde du fichier avant modification.
httpd -t, httpd -M et le contrôle de syntaxe
Sur Debian et dérivés, l'équivalent est apachectl configtest ou apache2ctl -t, qui fait la même chose. L'important est de prendre l'habitude de tester systématiquement, même pour une virgule ajoutée. Une syntaxe valide ne garantit pas un comportement correct, mais une syntaxe invalide garantit un échec au redémarrage. La différence entre les deux situations est énorme quand on est en production. Et si votre serveur redémarre sans souci mais que le site ne fonctionne pas, vous avez au moins éliminé la cause la plus simple.
Repérer les conflits de contexte et les directives ignorées
Apache signale parfois un avertissement du type « directive ignorée, probablement placée dans un mauvais contexte ». Ce message est précieux et trop souvent noyé dans les logs de démarrage. Je vous conseille de surveiller le journal d'erreurs au démarrage du service, surtout après une modification. Les directives ignorées sont peut-être plus dangereuses que les erreurs franches, parce qu'elles produisent un serveur qui tourne mais ne fait pas ce que vous croyez. Un contrôle visuel rapide de la sortie de redémarrage suffit généralement à les repérer.
Erreurs fréquentes quand on consulte une référence de directives
Même avec la meilleure documentation du monde, on se trompe. Les erreurs récurrentes que je vois autour de la table de référence tiennent presque toujours à une lecture trop rapide ou à une confiance excessive dans un souvenir. La table est fiable, mais notre interprétation ne l'est pas toujours. Prendre le temps de vérifier chaque ligne avant de l'appliquer, c'est la différence entre un administrateur serein et un administrateur qui redémarre son serveur toutes les dix minutes.
Confondre contexte serveur virtuel et contexte répertoire
Cette confusion est probablement la plus fréquente de toutes. Une directive qui fonctionne dans un bloc <VirtualHost> ne fonctionnera pas forcément dans un <Directory>, et inversement. La table indique clairement les deux par les lettres v et d, mais l'œil a tendance à ne retenir qu'une lettre. Mon astuce : lisez la colonne contexte à voix haute quand vous avez un doute. Le simple fait de prononcer la lettre aide à la retenir, et cela prend deux secondes. C'est bête, mais efficace.
Oublier l'ordre de chargement des modules
L'ordre de chargement des modules a parfois des conséquences inattendues, notamment quand deux modules fournissent des directives du même nom ou modifient le même traitement. La documentation ne le dit pas toujours explicitement, mais la table de référence aide à repérer les modules concernés. En cas de conflit, testez en désactivant un module temporairement pour isoler la cause. Cette méthode empirique, un peu artisanale, reste l'une des plus efficaces pour diagnostiquer un comportement bizarre.
FAQ : les questions que tout le monde se pose sur la référence des directives
Cette section rassemble les questions qui reviennent le plus souvent, avec des réponses courtes et directes.
Où trouver la version officielle et à jour de la documentation ? Sur le site du projet Apache, à la section documentation de la version concernée. La table y est maintenue avec la sortie de chaque version mineure.
Les directives sont-elles identiques sur Debian, RHEL et Windows ? Le nom et le comportement des directives sont identiques, mais l'emplacement des fichiers de configuration et les modules chargés par défaut diffèrent. Vérifiez toujours la configuration active avec les outils de la distribution.
Que faire si une directive n'apparaît pas dans la table ? Elle provient probablement d'un module tiers. Consultez la documentation de ce module, car le projet Apache ne la couvre pas.
Peut-on se fier à la valeur par défaut sans la vérifier ? Oui, à condition de considérer qu'une valeur héritée d'un autre contexte peut la surcharger. La table donne la valeur de départ, pas la valeur effective.
Conclusion : votre référence des directives, un réflexe à cultiver
La table de référence des directives n'est pas un document glamour. Elle ne promet rien, ne vend rien, et ne cherche pas à vous séduire. Mais elle est honnête, précise et stable, ce qui est rare. En la consultant régulièrement, vous développez une intuition des contextes et des statuts qui finit par vous faire gagner un temps considérable. Vous repérez plus vite une directive mal placée, vous comprenez mieux pourquoi une configuration héritée se comporte bizarrement, et vous documentez vos choix avec des arguments solides. Pour ma part, ce document reste ouvert en permanence pendant mes sessions de configuration, et je ne compte plus les erreurs qu'il m'a évitées.
Alors, la prochaine fois que vous hésitez entre deux directives ou que vous vous demandez si une option est vraiment du noyau, ouvrez la référence. Prenez trente secondes pour vérifier le contexte et le statut, et vous économiserez probablement trente minutes de débogage. Ce n'est pas une promesse marketing, c'est juste l'expérience qui parle. Avec la version 2.4 bien installée en 2026 et les modules modernes qui remplacent progressivement les anciens, cette référence reste plus que jamais votre meilleur allié pour garder un serveur propre, sûr et prévisible. Et si vous débutez, sachez que cette gymnastique de lecture devient vite un automatisme. C'est un investissement modeste avec un rendement étonnamment élevé.