A chaque version majeure, Apache est devenu plus modulaire. Les version
1.x autorisaient l'utilisation de modules pour déléguer une partie du
traitement (les fameux mod_*
); la version 2 a
introduit la notion de « Multi-Processing Module » (MPM).
Les MPM permettent à Apache de traiter plusieurs requètes simultanément. Traditionnellement, Apache traitait ce problème en pré-forkant : il se dupliquait lui-même N fois (paramétrable) au démarrage et ainsi pouvait traiter un nombre plus important de requètes. L'inconvénient de cette méthode est l'empreinte mémoire : quand on se réplique, on réplique aussi la mémoire du processus initial.
Les versions 2.0 et supérieures introduisent d'autres modèles, principalement worker (ou thread-pool) et event. Le premier modèle consiste en un seul processus parcouru par plusieurs fils d'éxécution (des threads). On pourrait faire l'analogie avec une route. Au lieu de construire plusieurs routes entre A et B afin de pouvoir faire circuler plusieurs véhicules (pre-fork), on met simplement plusieurs voitures sur une seule route. Il faudra juste veiller aux collisions. C'est plus efficace et cela nécessite moins de bitume. Le modèle event en revanche permet de traiter plusieurs connexions dans un seul processus en traitant les connexions les unes après les autres mais partiellement, afin d'avoir un traitement parallèle des connexions (plusieurs voitures mais un seul conducteur).
Le choix de modèle de fonctionnement conditionne le paquetage a installer.
Par défault, un apt-get install apache2
installera le modèle worker. Si l'on désire un autre
modèle, il suffira de l'installer explicitement.
root@ubuntu:~#apt-get install apache2-mpm-prefork
Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Reading state information... Fait Les paquets suivants seront ENLEVÉS : apache2-mpm-worker Les NOUVEAUX paquets suivants seront installés : apache2-mpm-prefork 0 mis à jour, 1 nouvellement installés, 1 à enlever et 4 non mis à jour. Il est nécessaire de prendre 0o/429ko dans les archives. Après dépaquetage, 8192o d'espace disque seront libérés. Souhaitez-vous continuer [O/n] ?O
dpkg : apache2-mpm-worker : problème de dépendance, mais suppression comme demandé : apache2 dépend de apache2-mpm-worker (>= 2.2.3-3.2build1) | apache2-mpm-prefork (>= 2.2.3-3.2build1) | apache2-mpm-event (>= 2.2.3-3.2build1) ; cependant : Le paquet apache2-mpm-worker doit être supprimé. Le paquet apache2-mpm-prefork n'est pas installé. Le paquet apache2-mpm-event n'est pas installé. (Lecture de la base de données... 14790 fichiers et répertoires déjà installés.) Suppression de apache2-mpm-worker ... * Stopping web server (apache2)... [ OK ] Sélection du paquet apache2-mpm-prefork précédemment désélectionné. (Lecture de la base de données... 14785 fichiers et répertoires déjà installés.) Dépaquetage de apache2-mpm-prefork (à partir de .../apache2-mpm-prefork_2.2.3-3.2build1_i386.deb) ... Paramétrage de apache2-mpm-prefork (2.2.3-3.2build1) ... * Starting web server (apache2)... [ OK ] root@ubuntu:~#
Apache recommande le MPM worker. En revanche, si PHP est requis, le MPM pre-fork doit être utilisé (PHP n'étant pas thread-safe).
Les modules d'Apache permettent de gérer un aspect spécifique du traitement d'une requète http : authentification (mod_auth), chiffrement (mod_ssl), interprétation du PHP (mod_php), etc... Ces modules peuvent être chargés ou non en fonction de la configuration souhaitée. On évitera évidemment d'activer des modules inutiles pour l'usage souhaité d'Apache. Les versions 2+ d'Apache fournissent les outils a2enmod et a2dismod pour respectivement demander le chargement ou non d'un module au boot.
Par exemple, si l'on désire activer SSL, il suffira d'exécuter la
commande a2enmod ssl
:
root@ubuntu:~#a2enmod ssl
Module ssl installed; run /etc/init.d/apache2 force-reload to enable. root@ubuntu:~#/etc/init.d/apache2 force-reload
* Forcing reload of web server (apache2)... [ OK ] root@ubuntu:~#
Ces scripts (ce sont des scripts shell) fonctionnent un peu à la manière de
update-rc.d ou chkconfig : ils créent un
lien symbolique dans /etc/apache2/mods-enabled/
depuis
le fichier de configuration chargeant le module
(/etc/apache2/mods-available/
).