Installer et activer HTTP2 sur Apache2

Publié initialement à : https://korben.info/installter-activer-http2-apache2.html

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

<IfModule http2_module>

LogLevel http2:info

</IfModule>


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.

Je te conseille de lire l’article du MISC n°88 (“HTTP2 attention peinture fraiche”) qui est plutôt bien fait et qui peut faire un peu relativiser sur HTTP2 :wink:

EDIT : Magazine payant. Lire l’article est donc conditionné à disposer d’un abonnement au MISC ou la possibilité de se procurer l’article.

Bonjour, y aurait-il un tuto pour activer le http2 sur un hébergement partagé?

Sur un mutualisé ? Pas possible, il faut voir ça avec ton hébergeur

1 « J'aime »

plipopipopa Il faut un compte “Connect” pour avoir accès à l’intégralité de l’article :relaxed:

mouais… le truc chiant avec la compilation manuelle, c’est que t’est obligé de recompiler après chaque mise à jour…

Oui effectivement, c’est un magazine payant. Il faut donc soit acheter la version papier/pdf soit être déjà abonné. Au pire tu as le numéro du magazine, tu peux essayer d’un moyen ou d’un autre de te le procurer à partir de là.
Mais effectivement mon message était conditionné à un abonnement au MISC ou la possibilité de se procurer l’article. :frowning:

Un nginx en reverse proxy (ce que je fais généralement) ou à la place d’apache est aussi pas mal, immédiat et supporte http2 (spdy ) depuis un bon bout de temps

1 « J'aime »

Sur Debian, HTTP/2 est activé pour les version d’apache >= 2.4.17 donc pas en stable…
Le paquet est disponible en testing et comme passer juste un paquet en testing c’est non seulement possible et aussi bien moins dégelasse que compiler ça à la mano, c’est ce que j’ai fait:
https://www.shivering-isles.com/http-2-getting-ready-on-debian-with-apache2/

1 « J'aime »

C’est pour cette raison je suppose que certains sites Pro sont passés d’Apache vers Nginx: WordPress, Github, SourceForge ou TorrentReactor

Côté perf tout dépend du socle matériel déployé autour du serveur Web dédié ou pas ET avec quel niveau de charge php il a été prévu initialement… En mode php pur, Apache est plus approprié évidemment. Au regard des tests que j’avais réalisé il y a quelques temps déjà, nginx est relativement plus performant en terme de requêtes supportées par le serveur (20 à 30 % de gain env). En revanche, en terme de “Sécurité” Apache vs Nginx, il n’y a pas photo, Apache est largement meilleur !

Quelqu’un aurait-il testé un couple NNginx avec mise en cache en frontal et Apache en mod_php ?? :grin: