Aujourd’hui nous allons voir comment ajouter le module Brotli à Nginx. Ce module est disponible nativement dans Apache depuis la version 2.4.26. Pour Nginx vous devons télécharger le module depuis le repo GitHub de Google et le compiler nous même.
Précision importante, nous allons compiler et ajouter le module Brotli à notre installation existante afin de ne pas réinstaller Nginx entièrement. Pour l’installation d’Nginx, c’est par ici
Je vais commencer par quelques explications. Pour passer directement à l’installation, cliquez ici !
Qu’est ce que le Brotli ?
Brotli est une bibliothèque de compression libre à source ouverte, dont un brouillon de normalisation est déposé à l’IETF, développé par Jyrki Alakuijala et Zoltan Szabadka pour Google. Il utilise un algorithme de compression offrant une vitesse de décompression comparable à l’algorithme deflate, et un taux de compression proche de LZMA.
Brotli est basé sur une version modifiée de LZ77, le codage de Huffman et un modelage du contexte de second ordre.
Wikipedia
Intérêt du Brotli face au GZIP
Tout l’intérêt du Brotli est qu’il compresse les fichiers plus vite et plus efficacement que le GZIP, beaucoup d’articles sur internet traite de ce sujet dans le détail. Je vais juste vous mettre un tableau que j’ai pu trouver sur csswizardry.com
Support par les navigateurs
Ce format de compression est supporté par tous les navigateurs récents même Safari (aka The New IE) !!!!
Mozilla Firefox ajoute le support pour ‘br’ dans la version 44 (sortie le 26 janvier 2016).
caniuse.com & Wikipedia
Microsoft Edge supporte ‘br’ depuis la version 15 (sortie on 5 avril 2017).
Google Chrome supporte la méthode de codage de contenu ‘br’ depuis la version 50 (sortie le 20 avril 2016).
Opera supporte ‘br’ depuis la version 38 (sortie 8 juin 2016).
Safari supporte ‘br’ depuis la version 11 (sortie le 5 octobre 2017).
Plesk supporte ‘br’ depuis la version 18.0.33 (sortie le 26 Janvier 2021).
Prérequis pour l’installation
Attention, procédure non testées sur Debian 12
Pour commencer nous allons vérifier la version actuellement installée sur notre serveur Debian/Linux. Dans mon cas et surement beaucoup d’entre vous au moment où j’écris cet article, c’est la version 1.18.0 qui est installée.
sudo nginx -v
Si le résultat est différent vous devrez adapter le numéro de version pour la suite.
nginx version: nginx/1.18.0 (Debian)
On va se placer à la racine de notre utilisateur, télécharger Nginx 1.18.0 puis décompresser le fichier
cd wget https://nginx.org/download/nginx-1.18.0.tar.gz && tar zxvf nginx-1.18.0.tar.gz
On télécharger les fichiers depuis le repo Google
git clone https://github.com/google/ngx_brotli.git cd ngx_brotli && git submodule update --init && cd ~ cd nginx-1.18.0
Si vous n’avez pas git, pas de panique, on l’installe
sudo apt install -y git
Vous pouvez maintenant relancer les commandes précédentes
Ici nous allons installer quelques packages nécessaires. Il se peut que vous ayez déjà les packages openssl, make et gcc. Pour info, gcc est un compilateur C.
sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev make gcc
On compile maintenant les modules Nginx
./configure --with-compat --add-dynamic-module=../ngx_brotli make modules sudo mkdir /etc/nginx/modules sudo cp objs/*.so /etc/nginx/modules/
Une fois que c’est compilé, nous allons copier les modules ngx_http_brotli dans le dossier de notre installation qui contient les modules et modifier les droits.
sudo cp objs/ngx_http_brotli_filter_module.so /usr/share/nginx/modules/ sudo cp objs/ngx_http_brotli_static_module.so /usr/share/nginx/modules/ sudo chmod 644 /usr/share/nginx/modules/ngx_http_brotli_filter_module.so sudo chmod 644 /usr/share/nginx/modules/ngx_http_brotli_static_module.so sudo chmod 644 /etc/nginx/modules/*.so
On édite le fichier de configuration
sudo nano /etc/nginx/nginx.conf
Nous allons maintenant indiquer à Nginx où trouver les 2 modules nouvellement ajoutés. Il suffit pour cela d’ajouter la directive load_module et d’ajouter le chemin vers ledit module. Comme sur les 2 premières lignes ci-dessous
load_module modules/ngx_http_brotli_filter_module.so; load_module modules/ngx_http_brotli_static_module.so; user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http {
Nous pouvons vérifier qu’il n’y a pas d’erreur
sudo nginx -t
Si tout est bon on relance Nginx
sudo systemctl restart nginx
Paramétrer la compression Brotli
On va une nouvelle fois éditer le fichier de configuration de Nginx
sudo nano /etc/nginx/nginx.conf
Nous pouvons maintenant ajouter les paramètres dans la partie http{ }, si vous avez un bloc GZIP Settings je vous conseille de les mettre à la suite, que la configuration de la compression soit au même endroit.
## # Brotli Settings ## brotli on; brotli_static on; brotli_comp_level 6; brotli_types text/plain text/xml text/css text/html text/comma-separated-values text/javascript application/x-javascript application/javascript application/json application/atom+xml application/octet-stream image/jpeg image/gif image/png image/svg+xml image/webp image/x-icon font/woff font/woff2;
On vérifie une nouvelle fois qu’il n’y a pas d’erreurs
sudo nginx -t
Puis on redémarrer pour recharger les paramètres
sudo systemctl restart nginx
C’est fini, ngx_brotli est maintenant installé et devrait fonctionner correctement sur Debian et/ou Ubuntu. La configuration du module est celle par défaut, à ça près que j’ai ajoutés quelques type mimes, notamment pour les images.
Vérifier que le Brotli est supporté
Pour vérifier que le Brotli est bien supporté par votre serveur vous avez plusieurs choix.
Avec cURL
curl -s -I -H 'Accept-Encoding: br' https://votre_site
Mon résultat sur le localhost de ma VM Debian
debian@debian:~$ curl -s -I -H 'Accept-Encoding: br' http://localhost HTTP/1.1 200 OK Date: Fri, 15 Apr 2022 11:28:07 GMT Content-Type: text/html Connection: keep-alive Vary: Accept-Encoding Server: nginx/1.18.0 Content-Encoding: br
On voit que la ligne « Content-Encoding » indique bien br. La configuration fonctionne donc correctement
Avec un outils en ligne
Vous pouvez aussi faire le test avec un outils en ligne. Personnellement j’utilise les outils de KeyCDN qui sont bien fait. Ils ont un outils de test Brotli. Voilà mon résultat
C’est fini pour ce tutoriel. C’est à vous de jouer pour tester le niveau de compression optimal en fonction de la capacité de votre serveur !