Comment ajouter le module gzip à Nginx sur CentOS 7

introduction

La vitesse de chargement d’un site Web dépend de la taille de tous les fichiers qui doivent être téléchargés par le navigateur. Réduire la taille des fichiers à transmettre peut non seulement accélérer le chargement du site Web, mais également le rendre moins cher pour ceux qui doivent payer pour l’utilisation de la bande passante.

http://www.gzip.org/ [+ gzip +] est un programme de compression de données populaire. Vous pouvez configurer Nginx pour utiliser + gzip + pour compresser les fichiers qu’il sert à la volée. Ces fichiers sont ensuite décompressés par les navigateurs qui les prennent en charge lors de la récupération, sans aucune perte, mais avec l’avantage de transférer moins de données entre le serveur Web et le navigateur.

En raison du fonctionnement général de la compression, mais également du fonctionnement de + gzip +, certains fichiers sont compressés mieux que d’autres. Par exemple, les fichiers texte sont très bien compressés et aboutissent souvent à un résultat deux fois plus petit. D’autre part, les images telles que les fichiers JPEG ou PNG sont déjà compressées de par leur nature et une seconde compression utilisant + gzip + donne peu ou pas de résultats. La compression des fichiers utilise des ressources de serveur, il est donc préférable de ne compresser que les fichiers qui réduiront considérablement sa taille.

Dans ce guide, nous expliquerons comment configurer Nginx installé sur votre serveur CentOS 7 afin qu’il utilise la compression + gzip + pour réduire la taille du contenu envoyé aux visiteurs du site Web.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

Étape 1 - Création de fichiers de test

Dans cette étape, nous allons créer plusieurs fichiers de test dans le répertoire par défaut de Nginx afin d’écrire la compression "+ gzip +".

Pour décider quel type de fichier est servi sur le réseau, Nginx n’analyse pas le contenu du fichier, car il ne serait pas assez rapide. Au lieu de cela, il se contente de rechercher l’extension du fichier pour déterminer son type _MIME, qui indique la fonction du fichier.

En raison de ce comportement, le contenu des fichiers de test n’est pas pertinent. En nommant les fichiers de manière appropriée, nous pouvons persuader Nginx de penser qu’un fichier entièrement vide est une image et l’autre, par exemple, une feuille de style.

Dans notre configuration, Nginx ne compresse pas les très petits fichiers. Nous allons donc créer des fichiers de test d’une taille exacte de 1 kilo-octet. Cela nous permettra de vérifier si Nginx utilise la compression comme il le devrait, compressant un type de fichiers et non les autres.

Créez un fichier de 1 kilo-octet nommé + test.html + dans le répertoire Nginx par défaut en utilisant + truncate +. L’extension indique qu’il s’agit d’une page HTML.

sudo truncate -s 1k /usr/share/nginx/html/test.html

Créons quelques autres fichiers de test de la même manière: un fichier image + jpg + , une feuille de style + css + 'et un fichier JavaScript + + js +.

sudo truncate -s 1k /usr/share/nginx/html/test.jpg
sudo truncate -s 1k /usr/share/nginx/html/test.css
sudo truncate -s 1k /usr/share/nginx/html/test.js

Étape 2 - Vérification du comportement par défaut

L’étape suivante consiste à vérifier le comportement de Nginx en ce qui concerne la compression lors d’une nouvelle installation avec les fichiers que nous venons de créer.

Vérifions si le fichier HTML nommé + test.html + est servi avec compression. La commande demande un fichier à notre serveur Nginx et spécifie qu’il est correct de servir le contenu compressé + gzip + en utilisant un en-tête HTTP (+ Accept-Encoding: gzip +).

curl -H "Accept-Encoding: gzip" -I http://localhost/test.html

En réponse, vous devriez voir plusieurs en-têtes de réponse HTTP:

En-têtes de réponse Nginx

HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Fri, 11 Mar 2016 12:53:06 GMT
Content-Type: text/html
Content-Length: 1024
Last-Modified: Fri, 11 Mar 2016 12:48:02 GMT
Connection: keep-alive
ETag: "56e2be82-400"
Accept-Ranges: bytes

Dans la réponse, il n’est fait aucune mention de + gzip +. Cela nous indique que la compression + gzip + n’est pas activée sur le serveur. Cela est dû à CentOS 7, le support de + gzip + est entièrement désactivé dans la configuration Nginx par défaut. Si la compression était activée, la sortie contiendrait un en-tête supplémentaire indiquant + Content-Encoding: gzip +.

Non seulement les pages HTML, mais tous les autres fichiers d’une nouvelle installation seront servis non compressés. Pour vérifier cela, vous pouvez demander notre image test nommée + test.jpg + de la même manière.

curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg

Le résultat devrait être pratiquement identique à celui d’avant:

En-têtes de réponse Nginx

HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Fri, 11 Mar 2016 12:58:03 GMT
Content-Type: image/jpeg
Content-Length: 1024
Last-Modified: Fri, 11 Mar 2016 12:48:05 GMT
Connection: keep-alive
ETag: "56e2be85-400"
Accept-Ranges: bytes

Il n’y a pas non plus d’en-tête + Content-Encoding: gzip + dans la sortie, ce qui signifie que le fichier a été servi sans compression.

Vous pouvez répéter le test avec la feuille de style CSS.

curl -H "Accept-Encoding: gzip" -I http://localhost/test.css

Encore une fois, il n’ya aucune mention de compression dans la sortie.

En-têtes de réponse Nginx pour le fichier CSS

HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Fri, 11 Mar 2016 12:59:04 GMT
Content-Type: text/css
Content-Length: 1024
Last-Modified: Fri, 11 Mar 2016 12:48:05 GMT
Connection: keep-alive
ETag: "56e2be85-400"
Accept-Ranges: bytes

Étape 3 - Activation et configuration du module gzip de Nginx

L’étape suivante consiste à configurer Nginx afin d’activer la compression pour tous les formats de fichiers pouvant tirer parti de la compression.

Le module + gzip + est un module principal de Nginx, ce qui signifie qu’il est déjà installé mais doit être activé et configuré. Dans une nouvelle installation de Nginx sur CentOS 7, tous les fichiers portant l’extension + .conf + du répertoire + / etc / nginx / conf.d + sont automatiquement chargés. Cela facilite la configuration de modules supplémentaires.

Pour activer le module Nginx + gzip +, créez le fichier de configuration nommé + gzip.conf + en utilisant + nano + ou votre éditeur de texte favori.

sudo nano /etc/nginx/conf.d/gzip.conf

Coller dans le contenu suivant.

/etc/nginx/conf.d/gzip.conf

##
# `gzip` Settings
#
#
gzip on;
gzip_disable "msie6";

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

Enregistrez et fermez le fichier pour quitter.

Passons en revue les paramètres de configuration appliqués ici:

  • La directive + gzip on + active la compression Gzip.

  • + gzip_disable" msie6 "+ exclut Internet Explorer 6 des navigateurs qui recevront des fichiers compressés, car IE6 ne supporte pas du tout + gzip +.

  • Les paramètres + gzip_vary + et + + gzip_proxied + permettent de s’assurer que les serveurs proxy situés entre le navigateur et le serveur reconnaissent correctement la compression.

  • + gzip_comp_level 6 + définit combien de fichiers seront compressés. Plus le nombre est élevé, plus le niveau de compression et l’utilisation des ressources sont élevés. 6 est un terrain d’entente raisonnable.

  • + gzip_http_version 1.1 + est utilisé pour limiter la compression + gzip + aux navigateurs prenant en charge le protocole HTTP / 1.1. Si le navigateur ne le supporte pas, il y a de bonnes chances qu’il ne supporte pas non plus + gzip +.

  • + gzip_min_length 256 + indique à Nginx de ne pas compresser les fichiers dont la taille est inférieure à 256 octets. Les très petits fichiers bénéficient à peine de la compression.

  • + gzip_types + répertorie tous les types MIME qui seront compressés. Dans ce cas, la liste comprend les pages HTML, les feuilles de style CSS, les fichiers Javascript et JSON, les fichiers XML, les icônes, les images SVG et les polices Web.

Pour activer la nouvelle configuration, redémarrez Nginx.

sudo systemctl restart nginx

Étape 4 - Vérification de la nouvelle configuration

L’étape suivante consiste à vérifier si les modifications apportées à la configuration ont fonctionné comme prévu.

Nous pouvons tester cela comme nous l’avons fait à l’étape 2, en utilisant + curl sur chacun des fichiers de test et en examinant le résultat pour l’en-tête` + Content-Encoding: gzip`.

curl -H "Accept-Encoding: gzip" -I http://localhost/test.html

En réponse, vous devriez voir l’en-tête + Content-Encoding: gzip + qui n’était pas là auparavant:

En-têtes de réponse Nginx

HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Fri, 11 Mar 2016 13:19:16 GMT
Content-Type: text/html
Last-Modified: Fri, 11 Mar 2016 12:48:02 GMT
Connection: keep-alive
Vary: Accept-Encoding

Vous pouvez tester tous les autres fichiers de la même manière:

curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg
curl -H "Accept-Encoding: gzip" -I http://localhost/test.css
curl -H "Accept-Encoding: gzip" -I http://localhost/test.js

Maintenant, seul + test.jpg +, qui est un fichier image, doit rester non compressé. Dans les deux autres exemples, vous devriez pouvoir trouver l’en-tête + Content-Encoding: gzip + dans la sortie.

Si tel est le cas, vous avez correctement configuré la compression + gzip + dans Nginx!

Conclusion

Changer la configuration de Nginx pour utiliser pleinement la compression ` + gzip + `est facile, mais les avantages peuvent être immenses. Non seulement les visiteurs disposant d’une bande passante limitée recevront le site plus rapidement, mais Google se réjouira également du chargement plus rapide du site. La vitesse gagne du terrain en tant que partie importante du Web moderne et l’utilisation de `+ gzip + est un grand pas en avant pour l’améliorer.