Installer et activer HTTP2 sur Apache2
Vous connaissez sans doute le HTTP2 qui résout pas mal de soucis qu’avait le HTTP 1.1 sorti en 1999. Pour résumer, les requêtes en HTTP2 peuvent être envoyées en rafale durant la même connexion TCP (multiplexage) et les réponses peuvent être reçues dans le désordre, éliminant ce besoin de connexions multiples entre 1 client et le serveur. Le client (donc le navigateur) peut indiquer au serveur quelles sont les ressources qui sont le plus importantes pour lui, afin de les recevoir en priorité. Les entêtes HTTP sont compressées, et le serveur peut envoyer des ressources au client, même si celui-ci ne lui a rien demandé.
Bref, une bonne avancée depuis le HTTP qui permet d’accélérer vraiment le web. Voici donc un modeste article qui va vous expliquer comment l’activer sur votre serveur Apache.
Mais avant de commencer, vous devez garder en tête que tous les navigateurs ne supportent pas le HTTP2. Les navigateurs anciens accéderont toujours à votre site via HTTP 1.x.. HTTP2 requiert aussi un certificat SSL valide, car accessible uniquement via la couche TLS. Enfin, le multiplexage s’active site par site.
Je vais donc commencer par Apache et partir du principe que vous êtes comme d’habitude sous Ubuntu. Moi je suis en Ubuntu 16.04 et quand je tente d’activer le module Apache http2 avec la commande :
sudo a2enmod http2
J’obtiens ceci comme message :
HTTP2 étant considéré encore comme quelque chose d’expérimental sous Ubuntu 16.04, il va falloir ajouter quelques dépôts Xenial dans votre sources.list :
sudo nano /etc/apt/sources.list
et ajoutez les lignes suivantes à la fin du fichier :
deb-src http://archive.ubuntu.com/ubuntu/ xenial main universe restricted multiverse
deb-src http://security.ubuntu.com/ubuntu xenial-security main universe restricted multiverse
deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main universe restricted multiverse
Faites ensuite un
sudo apt-get update
sudo apt-get upgrade
Ensuite, on va installer la lib http2 et télécharger les sources d’Apache et compiler tout ça :
sudo apt-get install libnghttp2-dev
mkdir apache2
cd apache2
sudo apt-get source apache2
sudo apt-get build-dep apache2
cd apache-2.4.18
sudo fakeroot debian/rules binary
Et une fois que le module est compilé, copiez-le au bon endroit
sudo cp ./debian/apache2-bin/usr/lib/apache2/modules/mod_http2.so /usr/lib/apache2/modules/
Ensuite il faut signifier à Apache l’existence de ce module. Pour cela, éditez le fichier :
sudo nano /etc/apache2/mods-available/http2.load
Et ajoutez-y la conf suivante :
LoadModule http2_module /usr/lib/apache2/modules/mod_http2.so
LogLevel http2:info
Et maintenant on peut activer le fameux module http2 :
sudo a2enmod http2
Maintenant, il faut ajouter le protocole http2 pour chaque virtualhost en SSL. Par exemple pour le virtual host par défaut en SSL, éditez le fichier :
sudo nano /etc/apache2/sites-enabled/default-ssl.conf
Et ajoutez-y la ligne
Protocols h2 http/1.1
Comme ceci :
A faire partout là où c’est nécessaire (sur les sites en SSL). Ou alors si vraiment vous êtes sûr de votre coup, vous pouvez activer http2 sur l’ensemble de vos sites en éditant le fichier
sudo nano /etc/apache2/apache2.conf
Et en y ajoutant la ligne
Protocols h2 http/1.1
Une fois que tout cela est fait, il ne vous reste plus qu’à relancer Apache avec la commande suivante :
service apache2 restart
Et voilà, votre serveur supporte le http2 et pour tester vos sites, vous pouvez le faire via cet outil.