Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !

Configuration de base d'Apache

Fichiers de configuration

La configuration du service Apache se fait par l’édition de fichiers au format texte chargés par le programme httpd, dont le principal porte le nom de httpd.conf ou apache.conf en fonction du type d’installation (compilation ou package de distribution).

Selon la méthode d’installation, sa localisation diffère en fonction des choix lors de la compilation :

  • Pour une installation à partir des packages de la distribution Debian/Linux, le fichier principal apache2.conf se trouve dans le répertoire /etc/apache2.

  • Pour une installation à partir des sources, le fichier httpd.conf se situe dans le répertoire défini par la variable sysconfdir lors de la génération de la configuration de compilation avec la commande configure.

    Exemples :

  • /opt/prod/apache2.4/conf/httpd.conf avec un sysconfdir et un prefix définis à /opt/prod/apache2.4.

  • /etc/apache2.4 avec un sysconfdir modifié dans un "layout".

D’autres fichiers de configuration peuvent être inclus via la directive Include, et seront chargés au démarrage (ou redémarrage) du service.

Des fichiers .htaccess peuvent se trouver dans les répertoires des sites web, permettant également de spécifier une configuration qui leur est propre, applicable uniquement sur ces derniers.

1. Syntaxe des fichiers de configuration

Les fichiers de configuration sont constitués de directives données ligne par ligne, les arguments des directives étant séparés par des espaces.

Toute ligne précédée...

Première configuration

Pour débuter dans la configuration du service, les actions menées ci-après seront basées sur l’installation d’Apache à partir des sources (cf. chapitre Installation d’Apache sous Linux - Compilation depuis les sources).

Un fichier de configuration généré lors de l’installation est disponible dans le répertoire défini par le sysconfdir, soit dans le cas présent, dans le répertoire /etc/apache2.4.

Dans un premier temps, observer les processus httpd afin de savoir sous quel compte Unix le service est exécuté.


marty@vm-compilation-eni:~$ sudo ps fu -C httpd  
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME  
COMMAND 
root      2902  0.0  0.1  74580  2120 ?        Ss   06:31   0:00  
/opt/prod/apache2.4/bin/httpd -k start  
daemon    2903  0.0  0.1 298276  2104 ?        Sl   06:31   0:00  
\_ /opt/prod/apache2.4/bin/httpd -k start  
daemon    2904  0.0  0.1 298276  2544 ?        Sl   06:31   0:00  
\_ /opt/prod/apache2.4/bin/httpd -k start  
daemon    2905  0.0  0.1 298276  2108 ?        Sl   06:31   0:00  
\_ /opt/prod/apache2.4/bin/httpd -k start 
 

Comme vous pouvez le constater, le service est lancé par l’utilisateur root, puis d’autres processus sont lancés sous l’utilisateur daemon.

La première chose à faire consiste donc à créer un nouvel utilisateur et son groupe pour le service Apache.

1. Création du compte utilisateur d’Apache

Il s’agit de créer un groupe et un compte Unix sur le serveur :


marty@vm-compilation-eni:~$ sudo addgroup --gid 10000 httpd24  
Ajout du groupe « httpd24 » (GID 10000)...  
Fait.  


marty@vm-compilation-eni:~$ sudo adduser --uid 10000 --gid 10000  
--home /opt/prod/apache2.4/ --no-create-home --disabled-password  
--disabled-login --shell /bin/false httpd24  
Ajout de l'utilisateur « httpd24 » ...  
Ajout du nouvel utilisateur « httpd24 » (10000) avec...

Directives Core

1. Directives globales

a. ServerRoot

Directive permettant de définir la racine du répertoire d’installation du serveur.

Syntaxe : ServerRoot chemin de répertoire

Défaut : ServerRoot /usr/local/apache

Contexte : configuration du serveur.


ServerRoot /opt/prod/apache2.4
 

b. ServerName

Directive permettant de définir le nom d’hôte et le port de requête auquel le serveur doit être en mesure de répondre.

Syntaxe : ServerName [protocole://]nom de domaine entièrement qualifié[:port]

Contexte : configuration du serveur, serveur virtuel.


ServerName eni.labs
 

Cette directive peut également être indiquée dans une directive VirtualHost, dans le cadre d’une utilisation de serveurs virtuels basés sur le nom.

c. ServerAlias

Description : autres noms d’un serveur utilisables pour atteindre des serveurs virtuels à base de nom.

Syntaxe : ServerAlias nom serveur [nom serveur] ...

Contexte : serveur virtuel.


ServerAlias *.eni.labs
 

d. ServerAdmin

Directive permettant de définir l’adresse e-mail de contact de l’administrateur, que le serveur affichera (sur la page web) en cas d’erreur lors de la requête.

Syntaxe : ServerAdmin On|Off|EMail

Défaut : ServerAdmin Off

Contexte : configuration du serveur, serveur virtuel, répertoire, .htaccess.


ServerAdmin sysadmin@eni.labs
 

e. ServerSignature

Directive permettant de définir un pied de page lors de l’affichage d’une page d’erreur.

Syntaxe : ServerSignature On|Off|EMail

Défaut : ServerSignature Off

Contexte : configuration du serveur, serveur virtuel, répertoire, .htaccess.


ServerSignature On
 

f. ServerTokens

Directive permettant de définir la valeur de l’en-tête Server de la réponse du serveur.

Syntaxe : ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

Défaut : ServerTokens Full

Contexte : configuration du serveur.

ServerTokens Full (défaut) :


Server: Apache/2.4.12 (Unix) PHP/5.4.4
 

ServerTokens Prod[uctOnly] :


Server: Apache
 

ServerTokens Major :


Server: Apache/2
 

ServerTokens Minor :


Server: Apache/2.4
 

ServerTokens Min :


Server: Apache/2.4.12
 

ServerTokens OS :


Server: Apache/2.4.12 (Unix)
 

g. LoadModule

Directive faisant partie du module mod_so (module static), elle permet le chargement dynamique de modules supplémentaires.

Syntaxe : LoadModule module nom-fichier...

Modules

L’une des forces d’Apache est sa modularité. En effet, il existe de nombreux modules permettant d’effectuer divers traitements en fonction des besoins.

Lors de la création du premier fichier de configuration, nous avons vu qu’il était nécessaire d’activer certains modules pour le bon fonctionnement du service httpd.

La liste des modules disponibles étant importante, voici ci-après une liste des principaux modules utilisés dans des projets web. Pour avoir la liste complète de ces derniers, rendez-vous sur la page officielle dédiée à cet effet : http://httpd.apache.org/docs/current/mod/

Il s’agit des modules officiels du projet Apache. Il existe néanmoins des modules « tiers » maintenus par d’autres sociétés ou communautés.

1. mod_unixd (unixd_module)


LoadModule unixd_module modules/mod_unixd.so
 

Ce module permet de gérer les aspects de sécurité de base d’Apache.

a. User

Directive permettant de préciser l’utilisateur sous lequel le serveur va traiter les requêtes.

Syntaxe : User utilisateur unix

Défaut : User #-1

Contexte : configuration du serveur.


User httpd24
 

Il est conseillé de créer un compte utilisateur dédié à l’exécution du service Apache ne devant avoir accès qu’aux ressources qu’il doit pouvoir servir.

En aucun cas il ne doit pouvoir accéder à d’autres fichiers, tels que les fichiers système ou ceux de comptes utilisateurs n’ayant rien à voir avec un projet web.

b. Group

Directive permettant de préciser le groupe sous lequel le serveur va traiter les requêtes.

Syntaxe : Group groupe unix

Défaut : Group #-1

Contexte : configuration du serveur.


Group httpd24
 

c. ChrootDir

Directive permettant de préciser le répertoire dans lequel Apache doit se positionner au démarrage après avoir effectué un chroot (change root).

Syntaxe : ChrootDir chemin-répertoire

Défaut : Non défini

Contexte : configuration du serveur.

Le chroot permet l’isolation de l’exécution d’Apache, et ainsi, d’éviter la compromission complète du système en cas d’intrusion.


ChrootDir /opt/chroot
 

d. Suexec

Directive permettant...

Cas concret : création de l’environnement applicatif d’un site web

Pour illustrer l’utilisation des modules et directives de configuration vus précédemment, l’environnement applicatif ci-dessous va être mis en place :

  • Site 1 nommé « app1 », situé dans le répertoire /opt/app1.

La configuration d’Apache :

  • Fichier principal de configuration : etc/apache2.4/httpd.conf.

  • Fichiers de configuration des modules : /etc/apache2.4/conf/modules.conf.

  • Fichiers de configuration des directives globales : /etc/apache2.4/conf/server.conf.

  • Fichiers de configuration du MPM Event (par défaut) : /etc/apache2.4/conf/mpm-event.conf.

  • Localisation des fichiers journaux (logs) : /var/log/apache2.4/.

  • Localisation des fichiers de configuration pour les applications : /etc/apache2.4/vhosts/.

  • Un premier fichier Virtualhost app1 : app1_vhost.conf.

Les répertoires conf et vhosts étant spécifiques à notre environnement (pour illustrer cet exemple), il est donc nécessaire de les créer.


marty@vm-compilation-eni:~$ sudo mkdir /etc/apache2.4/ 
{conf,vhosts}
 

L’arborescence est à présent la suivante :


marty@vm-compilation-eni:~$ sudo tree -d /etc/apache2.4/  
/etc/apache2.4/  
├── conf  
├── extra  
├── original  
│   └── extra  
└── vhosts  
 
5 directories
 

1. Fichier de configuration principal d’Apache httpd.conf

Ci-dessous, la base de notre fichier de configuration httpd.conf :


ServerRoot /opt/prod/apache2.4  
ServerName vm-compilation-eni  
ServerAdmin sysadmin@eni.labs  
ServerSignature On  
ServerTokens Minor  
 
# Liste des modules activés  
Include /etc/apache2.4/conf/modules.conf  
 
# Directives globales  
Include /etc/apache2.4/conf/server.conf  
 
# Directives du MPM par défaut (Event)  
Include /etc/apache2.4/conf/mpm-event.conf  
 
# DocumentRoot par defaut du serveur Apache  
DocumentRoot /opt/prod/apache2.4/htdocs/  
 
# Accès à la racine interdit par defaut  
<Directory />  
        Options None  ...