Yunohost activer http2 dans Nginx

Les dernières versions de Yunohost tournent sous Debian 9. Avec cette version de Debian, la version de nginx est la version 1.10. Cette version supportant le protocole http2, je me suis posé la question de est-ce que c'est activé ou activable et sinon, pourquoi ?

Quelques rappels sur http2

Http2 est une nouvelle version du protocole Http qui date de quelques années.

Http2 apporte les optimisations suivantes :
- Compression des headers des requêtes et des réponses : cette optimisation conduit à la réduction de la bande passante lorsque les headers sont similaires.
- le multiplexage des requêtes au serveur : de multiples informations passent alors via un seul tuyau de transmission.
- Les requêtes sont effectuées simultanément par le navigateur

Http2 et Yunohost

Les différents fichiers de configuration nginx, que ce soit pour les domaines ou les sous domaines, se trouvent dans le dossier /etc/nginx/conf.d/

Dans les différents fichiers du type domaine.conf, j'ai commenté les lignes correspondant au http et ajouter des lignes pour http2.

server {
#listen 443 ssl;
#listen [::]:443 ssl;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name domaine.com;

Une fois les différents fichiers modifiés, on vérifie que l'on n'a pas fait d'erreur

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Et on relance nginx

# service nginx restart

Amélioration à faire : pour pouvoir modifier tous les fichiers de configuration en même temps, un script à base de sed qui modifie les lignes.

Avec le protocole http 1.1, dans les logs, on peut voir des lignes du type

1.2.3.4 - genma [01/Sep/2018:15:04:53 +0200] "PROPFIND /remote.php/d
av/files/genma/ HTTP/1.1" 207 397 "-" "Mozilla/5.0 (Linux) mirall/2.3.3 (N
extcloud)"

Avec le protocole http 2,

1.2.3.4 - - [01/Sep/2018:14:27:20 +0200] "GET /index.php/apps/themin
g/favicon?v=0 HTTP/2.0"

Ce qui permet de valider également que le protocole http2 est bien en place.

Limitation - problème connu

Comme indiqué en réponse à une question que j'ai posé dans le forum Yunohost.org There is just one known problem : curl installation. Indeed, http2 is incompatible with curl (at least we don't know any solution). So, you can't install wordpress if http2 is enable for example. But ofc, after installation, if you reenable is, it will work (same for upgrade).

Http2 est incompatible avec curl et il n'y a pour l'instant pas de solution. On ne peut donc installer Wordpress (ce qui nécessite curl) si http2 est activé dans la configuration de nginx. La solution est de créer un sous-domaine, ce qui générera une configuration nginx par défaut pour ce sous-domaine (sans http2 d'activé donc), d'installer l'application sur ce sous-domaine et ensuite, d'activer http2.

A voir ce qu'il en est lors des mises à jour des applications : les packages d'applications Yunohost utilisent curl (voir le contenu du script install.sh dans les applications) pour récupérer le code source officiel de l'application, il doit donc être nécessaire de repasser en mode http dans la configuration avant la mise à jour.

Gain de performance mais pas de benchmark

J'ai donc activé http2 dans les différents fichiers de configuration Nginx de Yunohost. J'ai utilisé rapidement avec les outils de développement web de Firefox pour voir les performances, mais par manque de temps et de motivation, je n'ai pas noté et fait un ensemble de tests et de métriques de type benchmark. Les quelques consultations du site et comparaisons avant / après, avec vidage de cache, montrent une amélioration / un peu plus de rapidité dans le chargement / affichage des pages. A voir avec le temps et l'usage, mais les premiers ressentis sont que les performances sont améliorées. Légèrement. A machine égale (un PC avec un Atom 1.6 Ghz, 2 Giga de Ram, autohébergé), les pages se chargent plus vite.

Vus : 456
Publié par genma : 387