Il y a quelques jours, j’ai été confronté à un problème de taille pour l’évolution de nos architectures WEB : Le passage au protocole HTTP/2.

Sur la documentation de NGinx, il n’y a rien de plus simple. Il suffit de passer NGinx dans la dernière version en date (http/2 marche depuis la 1.9.5) et d’avoir son site fonctionnant en HTTPS, rajouter une petite option dans son VHost et le tour est joué. Seulement, ce n’est pas si simple sous Ubuntu 14.04.

Avant d’expliquer comment faire pour rendre cette modification possible, je vais vous montrer comment installer la dernière version de NGinx et comment activer cette option dans vos VHost.

Installation de la version mainline de NGinx

Pour avoir accès au module HTTP2, il vous faut la dernière version de NGINX compilée avec openSSL en version 1.0.2 minimum et avec le flag http2. Sans ça, vous ne pourrez pas activer le HTTP/2 sur vos VHosts et les navigateurs n’accepteront pas le protocole.

Heureusement, @ChrisLea fournit un PPA contenant le package Nginx compile avec ces prérequis. Pour s’y inscrire et installer/mettrer à jour Nginx rien de plus simple :

sudo add-apt-repository -y ppa:chris-lea/nginx-devel
sudo apt-get update
# cas d'une MAJ
sudo apt-get upgrade
# cas d'une nouvelle installation
sudo apt-get install nginx-full
Attention : Si jamais la commande `add-apt-repository` ne marche pas chez vous, pensez à installer les packages suivants :

sudo apt-get install software-properties-common

Maintenant que NGinx est bien installé dans sa dernière version, vous pouvez maintenant activer le protocole http2 sur vos VHost facilement. Vous avez juste à éditer votre fichier et à remplacer la ligne suivante :

listen 443 ssl;

par :

listen 443 ssl http2;

Pensez à relancer Nginx puis, quand vous accédez à votre site, vous devriez voir dans les protocoles que vous êtes en h2 au lieux de http/1.1 :

Capture du 2015-11-05 12:49:45

Si vous avez bien h2 dans les protocoles, vous pouvez arrêter ici. Votre Ubuntu est correctement configuré et vous n’avez aucun souci. Pour les autres, les choses se corcent un peu et nous allons tout de suite voir ça.

Mise à jour d’OpenSSL

Si le protocole HTTP/2 ne marche pas chez vous, c’est due à la version de OpenSSL installé sur votre serveur. Comme indiqué plus haut, Nginx doit être compilé avec OpenSSL 1.0.2 pour pouvoir avoir le protocole HTTP/2 pris en compte par les navigateurs. Le souci, c’est que la library OpenSSL installée au sein d’Ubuntu doit aussi être la 1.0.2. Et dans la version 14.04, la dernière version disponible est la 1.0.1f.

La version 1.0.2 inclut la spécification RFC7301 ou le support du protocole ALPN qui est requis pour pouvoir accepter des négociations HTTP/2.
La version 1.0.1 ne permet d’utiliser que le protocole NPN qui est maintenant déprécié (mais qui suffit à activer le support d’HTTP/2 sous Firefox).

Pour mettre à jour OpenSSL en version 1.0.2, deux choix sont possibles : La compilation depuis les sources de la dernière version ou de trouver un PPA distribuant directement le package OpenSSL à jour.

Il se trouve qu’un dépôt distribuant PHP en version 5.6 dispose du paquet OpenSSL à jour. Pour s’y inscrire rien de plus simple :

sudo add-apt-repository -y ppa:ondrej/php5-5.6
sudo apt-get install openssl
Attention : Si jamais vous avez une erreur de clé de signature, vous devrez rentrer la commande suivante :

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C

Ensuite, pensez à réinstaller Nginx pour prendre en compte notre version d’OpenSSL mise à jour :

sudo apt-get install --reinstall nginx-full

Et le tour est joué. Maintenant si vous essayez d’accéder à votre site, vous devriez le voir avec le protocole h2.

Source