Apache : structure de la configuration
Comprendre l’organisation de la configuration d’Apache évite l’essentiel des erreurs. Les exemples utilisent des noms génériques.
Directives et conteneurs
Section intitulée « Directives et conteneurs »La configuration est faite de directives (Nom valeur) et de conteneurs (<Nom …> … </Nom>) qui limitent leur portée :
| Conteneur | Portée |
|---|---|
<VirtualHost *:80> |
Un site (nom de domaine, port) |
<Directory /chemin> |
Un dossier du disque et ses sous-dossiers |
<Files "nom">, <FilesMatch "regex"> |
Des fichiers d’après leur nom |
<Location /url> |
Une URL (indépendante du disque) |
<Proxy>, <IfModule>, <If> |
Proxy, conditions sur les modules ou les requêtes |
<VirtualHost *:80> ServerName exemple.com DocumentRoot /var/www/exemple.com
<Directory /var/www/exemple.com> Require all granted </Directory>
<Location /admin> Require ip 192.168.1.0/24 </Location></VirtualHost><Directory> s’applique au système de fichiers, <Location> à l’URL : pour contrôler l’accès à des fichiers, utiliser <Directory> ou <Files>.
Découpage sur Ubuntu
Section intitulée « Découpage sur Ubuntu »apache2.conf inclut les fichiers « activés » : un fichier par site, par module et par fragment.
/etc/apache2/├── apache2.conf├── ports.conf├── envvars├── sites-available/ ← un fichier .conf par site├── sites-enabled/ ← liens symboliques (créés par a2ensite)├── conf-available/ ← fragments de configuration (ex. security.conf)├── conf-enabled/├── mods-available/ ← modules (.load) et leurs réglages (.conf)└── mods-enabled/sudo a2ensite exemple.com # lien symbolique dans sites-enabledsudo a2dissite exemple.comsudo a2enmod headerssudo a2enconf securityMéthode sûre pour modifier
Section intitulée « Méthode sûre pour modifier »sudo cp /etc/apache2/sites-available/exemple.com.conf /etc/apache2/sites-available/exemple.com.conf.baksudo nano /etc/apache2/sites-available/exemple.com.confsudo apache2ctl configtest # 1. tester : « Syntax OK »sudo systemctl reload apache2 # 2. appliquer sans couper les connexionssudo tail -n 20 /var/log/apache2/error.log # 3. vérifierLes fichiers de sauvegarde .bak placés dans sites-available/ sont ignorés (seuls les fichiers .conf activés sont lus).
| Commande | Effet |
|---|---|
sudo apache2ctl configtest |
Teste la syntaxe |
sudo apache2ctl -S |
Sites virtuels et leur ordre |
sudo apache2ctl -M |
Modules chargés |
sudo systemctl reload apache2 |
Recharge la configuration (processus conservés) |
sudo systemctl restart apache2 |
Redémarre (coupe les connexions) |
Contrôle d’accès : Require
Section intitulée « Contrôle d’accès : Require »Apache 2.4 utilise Require (l’ancien Order allow,deny n’est plus recommandé) :
| Directive | Effet |
|---|---|
Require all granted |
Autorise tout le monde |
Require all denied |
Refuse tout le monde |
Require ip 192.168.1.0/24 |
Autorise ces adresses |
Require valid-user |
Utilisateur authentifié (voir Sécurité) |
Require not ip 203.0.113.5 |
Exclut une adresse (dans un <RequireAll>) |
<Directory /var/www/exemple.com/prive> <RequireAll> Require ip 192.168.1.0/24 Require valid-user </RequireAll></Directory><RequireAny> (un des critères suffit, valeur par défaut) et <RequireAll> (tous requis) combinent les critères.
Le fichier apache2.conf d’Ubuntu refuse l’accès au système de fichiers par défaut, puis ouvre seulement ce qui est déclaré :
<Directory /> Options FollowSymLinks AllowOverride None Require all denied</Directory>
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted</Directory>Pour servir un dossier hors de /var/www, déclarer explicitement un <Directory> avec Require all granted, sinon 403 Forbidden.
| Option | Effet |
|---|---|
Indexes |
Liste le contenu d’un dossier sans fichier d’index |
FollowSymLinks |
Suit les liens symboliques |
MultiViews |
Négociation de contenu (à éviter, source de surprises) |
ExecCGI |
Autorise les scripts CGI |
Options -Indexes désactive le listing. Le signe - retire une option ; + en ajoute une.
.htaccess et AllowOverride
Section intitulée « .htaccess et AllowOverride »Un fichier .htaccess placé dans un dossier modifie la configuration de ce dossier sans recharger Apache. Il n’est lu que si AllowOverride l’autorise :
<Directory /var/www/exemple.com> AllowOverride None # .htaccess ignoré (recommandé : plus rapide et plus sûr) # AllowOverride All # .htaccess pris en compte (applications qui l'exigent) Require all granted</Directory>Ordre de fusion
Section intitulée « Ordre de fusion »Quand plusieurs conteneurs s’appliquent à une même requête, Apache les fusionne dans l’ordre : <Directory> (et .htaccess), puis <Files>, puis <Location>. En cas de conflit, le dernier l’emporte.
Variables
Section intitulée « Variables »ErrorLog ${APACHE_LOG_DIR}/exemple.com.error.log # variable définie dans /etc/apache2/envvarsDefine SITE_ROOT /var/www/exemple.comDocumentRoot ${SITE_ROOT}Modules : IfModule
Section intitulée « Modules : IfModule »<IfModule mod_headers.c> Header always set X-Content-Type-Options "nosniff"</IfModule>Le bloc est ignoré silencieusement si le module n’est pas chargé : utile pour des configurations portables, mais peut masquer un oubli de a2enmod.
Inclure des fichiers
Section intitulée « Inclure des fichiers »IncludeOptional /etc/apache2/snippets/*.confInclude /etc/apache2/conf-enabled/security.confPièges fréquents
Section intitulée « Pièges fréquents »| Piège | Explication |
|---|---|
403 sur un dossier hors de /var/www |
Absence de <Directory> avec Require all granted |
Header sans module |
Erreur Invalid command 'Header' : sudo a2enmod headers |
Règles RewriteRule ignorées |
a2enmod rewrite, et AllowOverride si elles sont dans un .htaccess |
| Modification non prise en compte | Oubli de reload, ou site non activé (a2ensite) |
| Fichier de site non pris en compte | Extension différente de .conf |
Dépannage
Section intitulée « Dépannage »sudo apache2ctl configtest # erreur de syntaxe : fichier et ligne indiquéssudo apache2ctl -S # quel site répond à quel nom ?sudo tail -f /var/log/apache2/error.log # pendant un test de requêtecurl -I -H "Host: exemple.com" http://127.0.0.1/cheminPour aller plus loin
Section intitulée « Pour aller plus loin »- Documentation : Configuration Sections et
.htaccess - Suite : Sites virtuels