Comment activer la compression Brotli dans Nginx

Comment activer la compression Brotli dans Nginx

La compression de Brotli est une technique de compression à usage générique largement prise en charge entre les navigateurs. Il est comparable aux méthodes de compression actuellement disponibles car il offre 20 à 26% de meilleurs ratios de compression. Néanmoins, ce n'est pas bon à moins que le serveur Web envoie des ressources textuelles compressées avec l'algorithme Brotli.

Dans cet article, nous apprendrons comment fonctionne la compression sur le serveur et pourquoi est-ce utile? Nous apprendrons également à installer le serveur Nginx et à faire en sorte que notre serveur fournit des fichiers compressés Brotli.

Arrière-plan

Les techniques de compression / algorithmes améliorent les performances du site Web en réduisant la taille du contenu. Par conséquent, les données compressées prennent une faible charge et un temps de transfert. Cependant, il a un prix. Les serveurs utilisent beaucoup de ressources de calcul pour fournir un meilleur taux de compression. Par conséquent, mieux. Donc, beaucoup d'efforts sont ajoutés pour améliorer les formats de compression tout en utilisant des cycles CPU minimaux.

À l'heure actuelle, le format de compression le plus potentiel a été gzippé. Récemment, GZIP est remplacé par un nouvel algorithme de compression appelé Brotli. Il s'agit d'un algorithme de compression avancé composé de codage Huffman, de l'algorithme L77 et de la modélisation de contexte. En revanche, GZIP est construit sur l'algorithme Deflate.

Le format de compression sans perte, conçu par Google, est étroitement lié au format de compression dégonflé. Les deux méthodes de compression utilisent des fenêtres coulissantes pour référencer le dos. La taille de la fenêtre coulissante Brotli varie de 1 Ko à 16 Mo. En revanche, GZIP a une taille de fenêtre fixe de 32 Ko. Cela signifie que la fenêtre de Brotli est 512 fois plus grande que la fenêtre Deflate, qui n'est pas pertinente car les fichiers texte supérieurs à 32 Ko sont rarement sur les serveurs Web.

La compatibilité de la compression du serveur est importante

Chaque fois que nous téléchargeons un fichier à partir du navigateur, le navigateur demande au serveur quel type de compression il prend en charge via un en-tête. Par exemple, si le navigateur prend en charge gzip et dégonfler se décompresser. Il ajoutera ces options dans son Codage, en-tête, je.e.,

Accepter-codage = ”Donte, gzip”

Par conséquent, les navigateurs qui ne soutiennent pas ces formats ne les incluront pas dans l'en-tête. Lorsque le serveur répond avec le contenu, il indique au navigateur le format de compression via un en-tête, Codage du contenu. Par conséquent, s'il prend en charge GZIP, alors l'en-tête ressemble à ceci:

Contenu-coding = ”gzip”

Les en-têtes des navigateurs comme Firefox qui prennent en charge la compression Brotli et le serveur Web qui ont un module Brotli installé pour ressembler à ceux-ci:

Accepter-codage = ”Donte, gzip, br”
Contenu-coding = ”gzip, br”

Par conséquent, si le navigateur utilise le meilleur format de compression et que le serveur Web ne le fait pas, ce n'est pas bon, car le serveur Web ne renverra pas les fichiers avec l'algorithme de compression préféré. C'est pourquoi il est important d'installer le module de compression pour le serveur Web.

Installation du serveur

Avant d'aller de l'avant avec la configuration de Brotli, nous installerons notre serveur Nginx. Avant ça Sudo Mise à jour apt-get Votre distribution Ubuntu et saisissez les commandes suivantes dans votre terminal bash.

ubuntu @ ubuntu: ~ $ sudo apt-get update
ubuntu @ ubuntu: ~ $ sudo apt-get install nginx -y
ubuntu @ ubuntu: ~ $ sudo service nginx start

Pour permettre la compression de Brotli dans le Nginx, nous compilerons notre .donc modules selon nos détails de version nginx. Comme indiqué, la saisie de la commande suivante sortira la version Nginx:

ubuntu @ ubuntu: ~ $ nginx -v
Version Nginx: Nginx / 1.18.0 (Ubuntu)

Utilisez le wget Commande avec votre détail Nginx Détail pour télécharger le code source du site Web Nginx.

ubuntu @ ubuntu: ~ $ wget https: // nginx.org / download / nginx-1.18.0.le goudron.gz
--2021-02-07 02: 57: 33-- https: // nginx.org / download / nginx-1.18.0.le goudron.gz
Résolution de Nginx.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2A05: D014: EDB: 5702 :: 6,…
Connexion à Nginx.org (nginx.org) | 3.125.197.172 |: 443… connecté.
Demande HTTP envoyée, en attente de réponse… 200 ok
Longueur: 1039530 (1015K) [Application / Octet-Stream]
Économiser à: 'nginx-1.18.0.le goudron.gz '
nginx-1.18.0.le goudron.GZ 100% [============================================================ ====================>] 1015K 220KB / S en 4.8s
2021-02-07 02:57:38 (212 kb / s) - 'nginx-1.18.0.le goudron.GZ 'Saved [1039530/1039530]

Nous utiliserons ce code source pour compiler *.donc des binaires pour la compression de brotli. Extraire maintenant le fichier à l'aide de la commande suivante.

ubuntu @ ubuntu: ~ $ tar xzf nginx-1.18.0.le goudron.gz

Configuration du module Brotli

Maintenant, Google a publié le module Brotli pour Nginx. Nous allons git-clone le module du référentiel Google.

ubuntu @ ubuntu: ~ $ git clone https: // github.com / google / ngx_brotli - réécursif.

Nous allons CD dans le nginx-1.18.0 dossier pour configurer le module dynamique Brotli.

ubuntu @ ubuntu: ~ $ cd nginx-1.18.0 /
ubuntu @ ubuntu: ~ $ sudo ./ Configurer --with-compat --add-dynamic-module =… / ngx_brotli

Remarque: vous pouvez recevoir l'erreur suivante lors de la configuration

./ Configurer: Erreur: le module de réécriture HTTP nécessite la bibliothèque PCRE.
Vous pouvez soit désactiver le module en utilisant --without-http_rewrite_module
Option ou installez la bibliothèque PCRE dans le système, ou créez la bibliothèque PCRE
Statistiquement à partir de la source avec nginx en utilisant --with-pcre = option.

Dans ce cas, exécutez la commande suivante pour installer la bibliothèque PCRE

ubuntu @ ubuntu: ~ $ sudo apt-get install libpcre3-dev -y

Compilation de module

Nous utiliserons le faire commande pour créer un modules dossier à l'intérieur du nginx-1.18.0 répertoire.

ubuntu @ ubuntu: ~ $ sudo faire des modules

Nous utilisons le CP commande de copier ngx_http_brotli *.donc fichiers de la nginx-1.18.0 / Objs dossier dans le dossier des modules.

ubuntu @ ubuntu: ~ $ cd / nginx-1.18.0 / Objs /
ubuntu @ ubuntu: ~ $ sudo cp ngx_http_brotli *.donc / usr / share / nginx / modules

Répertorie maintenant le contenu des fichiers à l'aide du LS commande. Vous remarquerez qu'il se compose de deux fichiers de modules différents, i.e.:

ubuntu @ ubuntu: ~ $ ls ngx_http_brotli *.donc
ngx_http_brotli_filter_module.donc
NGX_HTTP_BROTLI_STATIC_MODULE.donc
  • Module Brotli ordinaire: Le ngx_http_brotli_filter_module.Le module compresse donc tous les fichiers à la volée, et donc il nécessite plus de ressources de calcul
  • Module Brotli statique: Le NGX_HTTP_BROTLI_STATIC_MODULE.Le module lui permet donc de servir des fichiers statiques pré-compressés, donc moins à forte intensité de ressources.

Utilisez maintenant votre éditeur préféré pour ouvrir le / etc / nginx / nginx.Fichier Conf pour ajouter des modules de chargement Brotli pour commencer la configuration de Brotli en incluant les lignes suivantes:

ubuntu @ ubuntu: ~ $ sudo vim / etc / nginx / nginx.confli
# Section du module de chargement
load_module "modules / ngx_http_brotli_filter_module.donc";
load_module "modules / ngx_http_brotli_static_module.donc";

Nous inclurons également des chemins de dossier de configuration / etc / nginx / confre.d/*.confli

et / usr / share / nginx / modules / *.confli dans le fichier ci-dessus tel que:

http
# Inclure les dossiers de configuration
inclure / etc / nginx / confre.d/*.conf;
include / usr / share / nginx / modules / *.conf;

Pour ajouter la configuration de Brotli, ouvrez le / etc / nginx / confr.d / brotli.confli

fichier dans le vigueur éditeur et activer Brotli en définissant les directives de configuration suivantes:

Brotli sur;
Brotli_static sur;
Brotli_comp_level 6;
Brotli_types Application / RSS + XML Application / XHTML + XML
Texte / CSS Texte / PLAINE;

Le "Brotli off |»La valeur permet ou désactive la compression dynamique ou à la volée du contenu.

Le 'brotli_ statique sur ' permet au serveur Nginx de vérifier si les fichiers pré-compressés avec le .Les extensions BR existent ou non. Nous pouvons également transformer ce paramètre en une option désactivé ou toujours. Le toujours La valeur permet au serveur d'envoyer du contenu pré-compressé sans confirmer si le navigateur le prend en charge ou non. Puisque Brotli est à forte intensité de ressources, ce module est le mieux adapté pour réduire les situations de goulot d'étranglement.

Le "brotli_comp_level 6»Directive définit le niveau de qualité de compression dynamique à 6. Il peut aller de 0 à 11.

Enfin, activez la compression dynamique pour des types de mime spécifiques, tandis que les réponses texte / HTML sont toujours compressées. La syntaxe par défaut pour cette directive est brotli_types [type mime]. Vous pouvez en savoir plus sur la directive de configuration sur GitHub.

Enregistrez les modifications, redémarrez le service Nginx en tapant «Service sudo redémarrer nginx» Et tout est fait.

Conclusion

Après les modifications, vous remarquerez quelques améliorations évidentes dans les mesures de performance. Cependant, il est livré avec un léger inconvénient de l'augmentation de la charge du processeur aux heures de pointe. Pour éviter de telles situations, gardez un œil sur l'utilisation du processeur; S'il atteint 100% régulièrement, nous pouvons utiliser de nombreuses options conformément à nos préférences, comme la présentation de contenu pré-compressé ou statique, la réduction du niveau de compression et la désactivation de la compression à la volée, parmi beaucoup.