Activer la compression Brotli sur Nginx – Debian, Ubuntu

activer brotli sur nginx

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).
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).

caniuse.com & Wikipedia

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 !

5/5 - (18 votes)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Articles de la même catégorie

Retour en haut