Protocole de transfert hypertexte version 2 (HTTP/2 ) est la dernière version du protocole HTTP, publiée en tant que norme IETF dans la RFC 7540 en 2015. Le protocole se concentre sur les performances; plus précisément, la latence perçue par l'utilisateur final, le réseau et l'utilisation des ressources du serveur. L'un des principaux objectifs est de permettre l'utilisation d'une seule connexion entre les navigateurs et un site Web. Le protocole est rétrocompatible, de sorte que les méthodes HTTP, les codes d'état et la sémantique sont les mêmes que pour les versions précédentes du protocole. Apache prend en charge HTTP/2 depuis la version 2.4.17. Dans ce didacticiel, je vais supposer que vous disposez déjà d'une configuration TLS fonctionnelle et que la version Apache requise est installée sur la distribution Linux de votre choix, et que vous savez comment utiliser Let's Encrypt, ou vous savez comment émettre un certificat auto-signé.
Ce tutoriel a été testé sur Debian 10 , Debian 9, Ubuntu 20.04 LTS, et Ubuntu 18.04 LTS.
Prérequis
Pour activer HTTP/2 dans Apache, vous devez remplir les conditions suivantes :
- Tout d'abord, vous devez activer HTTPS sur votre serveur. Tous les principaux navigateurs autorisent l'utilisation de HTTP/2 uniquement sur HTTPS. En outre, TLS la version du protocole >= 1.2 avec des suites de chiffrement modernes est requise.
- Ensuite, assurez-vous que vous exécutez Apache 2.4.17 ou supérieur, car HTTP/2 est pris en charge à partir de cette version et des versions ultérieures.
- Assurez-vous également que votre client/navigateur prend réellement en charge HTTP/2.
Désactiver le module mod_php
Avant de pouvoir basculer le module Apache MPM à l'étape suivante vers mpm_event, nous devrons désactiver l'ancien mode mod_php et le remplacer par le mode PHP-FPM plus moderne. Les commandes diffèrent pour chaque version du système d'exploitation, veuillez utiliser celles qui correspondent à votre système installé.
Ubuntu 20.04 LTS
sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi
Debian 10
sudo apt-get install php7.3-fpm
sudo a2dismod php7.3
sudo a2enconf php7.3-fpm
sudo a2enmod proxy_fcgi
Ubuntu 18.04 LTS
sudo apt-get install php7.2-fpm
sudo a2dismod php7.2
sudo a2enconf php7.2-fpm
sudo a2enmod proxy_fcgi
Debian 9
sudo apt-get install php7.0-fpm
sudo a2dismod php7.0
sudo a2enconf php7.0-fpm
sudo a2enmod proxy_fcgi
Activer un Apache MPM compatible avec HTTP/2
Par défaut, Apache utilisera le préfork MPM. Ce MPM n'est pas compatible avec HTTP/2, nous devrons donc le remplacer par le module mpm_event plus moderne.
Tout d'abord, nous désactivons le module mpm_prefork :
sudo a2dismod mpm_prefork
Ensuite, nous activons le module mpm_event :
sudo a2enmod mpm_event
Activer la prise en charge HTTP/2 dans Apache
Pour que HTTP/2 fonctionne sur Apache, vous devez activer et charger les modules SSL et HTTP/2. Pour ce faire, vous pouvez exécuter ce qui suit dans votre terminal :
sudo a2enmod ssl
puis
sudo a2enmod http2
Pour activer ces nouveaux modules, vous devez exécuter :
sudo systemctl restart apache2
Après avoir activé et chargé les modules Apache nécessaires, accédez à votre répertoire de configuration Apache et modifiez la configuration Apache.
Pour activer HTTP/2 sur votre serveur Web Apache, ajoutez l'un des éléments suivants à votre configuration Apache globale ou à l'intérieur d'un hôte virtuel particulier.
Protocols h2 http/1.1
Voici la configuration minimale du serveur virtuel qui peut être utilisée pour activer HTTP/2 dans certains hôtes virtuels :
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/public_html/example.com
SSLEngine on
SSLCertificateKeyFile /path/to/private.pem
SSLCertificateFile /path/to/cert.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
Protocols h2 http/1.1
</VirtualHost>
Pour vérifier si votre serveur est compatible avec HTTP/2, vous pouvez utiliser les outils de développement de votre navigateur. Vous trouverez ci-dessous des captures d'écran des navigateurs Google Chrome et Apple Safari qui montrent HTTP/2 en action sur https://example.com domaine.
Chrome
Safari
Liens
- RFC 7540
- HTTP/2