Activation d’HTTP/2 sous Apache avec MPM event
Introduction à HTTP/2
HTTP/2 est une évolution majeure du protocole HTTP, conçue pour réduire la latence et améliorer les performances des sites web. Il permet le multiplexage, c’est-à-dire l’envoi de plusieurs requêtes sur une seule connexion TCP, ainsi que la compression des en-têtes via le protocole HPACK. HTTP/2 prend également en charge le Server Push bien que cette fonctionnalité soit peu utilisée aujourd’hui.
Les avantages principaux d’HTTP/2 incluent la réduction du nombre de connexions ouvertes, un chargement plus rapide des pages et une meilleure gestion des ressources côté serveur et client. Il est cependant important de noter que HTTP/2 n’accélère pas un site dont l’architecture ou le code est inefficace mais optimise le transport et l’échange des données.
Bien que la spécification officielle n'oblige pas le chiffrement, tous les navigateurs modernes (Chrome, Firefox, Safari, Edge) exigent une connexion HTTPS pour activer HTTP/2. Sans certificat SSL valide, votre serveur restera automatiquement en HTTP/1.1.
Les MPM dans Apache
Dans Apache, les MPM (Multi-Processing Modules) déterminent la manière dont le serveur gère les requêtes entrantes. Ils contrôlent le nombre de processus ou de threads utilisés pour traiter les requêtes, ce qui impacte directement les performances et la consommation de ressources.
Les principaux MPM sont :
- prefork : utilise un processus par requête. Stable mais gourmand en mémoire.
- worker : multi-thread, moins consommateur de mémoire et capable de gérer plus efficacement un grand nombre de connexions simultanées.
- event : basé sur
worker, avec gestion non bloquante des connexions keep-alive.
L’utilisation de mpm_event permet d’exploiter pleinement les avantages d’HTTP/2, tandis que mpm_prefork, longtemps la méthode classique pour utiliser mod_php, est aujourd’hui dépassé en raison de sa consommation mémoire et de son architecture. En effet, mod_php n’est pas compatible avec l’architecture multi-threadée et non bloquante de mpm_event, il est donc nécessaire de passer à PHP-FPM.
Configuration de HTTP/2 sous Apache
Pour activer HTTP/2, la configuration se déroule en trois étapes : le choix du MPM, l'activation du module et la déclaration du protocole.
Apache 2.2 et antérieur utilisait mpm_prefork par défaut sur les systèmes Unix/Linux. Depuis Apache 2.4, le serveur choisit automatiquement mpm_event lorsque la plateforme le permet (support des threads et mécanismes de polling modernes), ce qui correspond à la plupart des distributions Linux actuelles.
1. Basculer vers le MPM Event
HTTP/2 nécessite un MPM capable de gérer les threads. Si votre serveur utilise encore prefork, vous devez effectuer la bascule. Exemple sous Debian/Ubuntu :
# Désactiver le module prefork
sudo a2dismod mpm_prefork
# Activer le module event
sudo a2enmod mpm_event
# Redémarrer Apache
sudo systemctl restart apache2
2. Activer le module HTTP/2
Le support de HTTP/2 n'est pas actif par défaut dans la configuration standard d'Apache :
sudo a2enmod http2
3. Configurer les protocoles
Il faut indiquer à Apache quels protocoles il est autorisé à négocier. Cela se fait via la directive Protocols. Vous pouvez l'ajouter globalement dans apache2.conf ou par VirtualHost pour plus de précision :
<VirtualHost *:443>
ServerName www.monsite.fr
# Activation de HTTP/2 (h2) et maintien de HTTP/1.1 par sécurité
Protocols h2 http/1.1
SSLEngine on
# ... reste de votre configuration SSL
</VirtualHost>
Note : h2 désigne le HTTP/2 chiffré (TLS), tandis que h2c désigne le HTTP/2 en texte clair. En production, seul h2 est utilisé par les navigateurs.
Comment vérifier que cela fonctionne ?
Une fois la configuration rechargée, vous pouvez valider l'activation de HTTP/2 avec la commande curl :
curl -I --http2 https://www.monsite.fr
Si la réponse contient HTTP/2 200 dans l'en-tête, l'activation est opérationnelle.
En complément, vous pouvez tester votre domaine avec cet outil gratuit : HTTP/2 Test par KeyCDN.
Un point de vigilance : la négociation TLS (ALPN)
Pour que HTTP/2 fonctionne correctement, Apache doit pouvoir négocier le protocole avec le navigateur via l'extension TLS ALPN (Application-Layer Protocol Negotiation). Assurez-vous que votre serveur et votre version d'OpenSSL (version ≥ 1.0.2) supportent ALPN afin de garantir la compatibilité avec les navigateurs modernes.
Perspectives vers HTTP/3
HTTP/2 permet déjà une nette amélioration du transport des données grâce au multiplexage, à la compression des en-têtes et à une meilleure gestion des connexions persistantes. L'utilisation d'Apache avec le MPM event est essentielle pour exploiter pleinement ces avantages.
HTTP/3 continue cette évolution en utilisant QUIC au lieu de TCP, offrant un multiplexage natif avec moins de latence et une meilleure tolérance aux pertes de paquets. Les administrateurs et développeurs web peuvent donc considérer HTTP/2 comme une étape intermédiaire solide, tout en suivant l'évolution vers HTTP/3 pour préparer leurs infrastructures aux standards de transport les plus récents.