====== Activer http/2 avec Apache ======
Depuis quelques années maintenant est disponible le [[https://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol/2|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 [[serveur_hebergement:apache2: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 :
* Soit vous la mettez à l'intérieur de vos Virtual Host et seul ce Virtual Host sera en http/2
* Soit vous la mettez à l'extérieur de vos Virtual Host et tous les sites du fichier de configuration seront en http/2
* Soit vous la mettez dans le fichier de configuration général de Apache, situé dans /etc/apache2/apache2.conf, et tous vos sites seront en http/2
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|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 [[https://httpd.apache.org/docs/2.4/fr/mod/prefork.html|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 [[https://httpd.apache.org/docs/2.4/fr/mod/event.html|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 [[https://fr.wikipedia.org/wiki/PHP-FPM|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 :
* Installez php-fpm et libapache2-mod-fcgid sudo aptitude install php-fpm
* Activez le module [[https://fr.wikipedia.org/wiki/FastCGI|Fastcgi]] nécessaire à php-fpm sudo a2enmod proxy_fcgi setenvif
* Activez php-fpm sudo a2enconf php7.x-fpm
* Désactivez mod_php sudo a2dismod php7.x
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|https://tools.keycdn.com/http2-test]] vous devriez voir le http/2 actif.
Source : [[https://http2.pro/doc/Apache|https://http2.pro/doc/Apache]]