Activer http/2 avec Apache

Depuis quelques années maintenant est disponible le http/2, version améliorée du http (plus rapide, supportant l'envoi de requête multiple, etc). Debian Strech ayant les bonnes versions de Apache, Openssl, etc dans les dépôts stables pour pouvoir l'activer, ce qui n'était pas le cas avec Jessie, on va donc voir comment l'activer.

Version simple pour les chanceux

Tous d'abord il faut savoir que le http/2 ne peut être activé qu'en https. En effet, la majorité des navigateurs ne supportent le http/2 qu'en https, bien que le protocole puisse techniquement être utilisé sans ssl. Il faudra donc que vos sites soient accessibles en https. La page Let’s Encrypt, Certbot et SSL sur Debian traite de ce sujet.

Commencez par activer le module mod_http2 avec la commande

sudo a2enmod http2

.

Il faut maintenant ajouter la ligne

Protocols h2 http/1.1

dans vos fichiers de configuration Apache. Cette ligne indique que http/2 sera utilisé en priorité et s'il ne peut être utilisé on bascule sur le http. Vous avez plusieurs choix concernant cette ligne :

Redémarrez Apache avec la commande

sudo systemctl restart apache2

pour prendre en compte les modifications.

Rendez-vous sur le site https://tools.keycdn.com/http2-test pour tester si votre site est accessible en http/2. Si ça fonctionne, bravo, vous avez fini.

Si ça ne fonctionne pas, ce qui va arriver dans l'extrême majorité des cas sous Debian, il va falloir passer au chapitre 2.

Version moins simple pour les moins chanceux

Si lors du test, le site vous a répondu que le http/2 et alpn n'est pas disponible sur votre site, il va falloir faire quelques modifications. Si vous ouvrez le log Apache de votre site, vous trouverez cette ligne

The mpm module (prefork.c) is not supported by mod_http2.

Apache 2.4 fonctionne par défaut avec le module mpm_prefork, signifiant Multi-Processing Module, et ce module n'est pas compatible avec http/2 depuis la version 2.4.27 (c'est pas de bol…). Il va falloir qu'on le remplace par un autre. On va utiliser mpm_event à la place. Le seul hic, c'est que PHP, lorsqu'il est intégré à Apache via le module mod_php (ce qui est certainement le cas sur votre serveur web), a besoin du module mpm_prefork pour fonctionner. Il va donc également falloir qu'on remplace mod_php par php-fpm pour que PHP puisse interagir avec Apache. Avant de lancer toutes les commandes qu'il faut, si vous n'utilisez pas PHP, vous n'aurez que besoin de lancer les deux dernières commandes puis de redémarrer Apache.

Lancez les commandes suivantes uniquement si vous utilisez PHP :

Désactivez mpm_prefork

sudo a2dismod mpm_prefork

Activez mpm_event

sudo a2enmod mpm_event

Il ne reste plus qu'à redémarrer Apache

sudo systemctl restart apache2

. Si vous retournez sur le site https://tools.keycdn.com/http2-test vous devriez voir le http/2 actif.

Source : https://http2.pro/doc/Apache