GNU/Linux >> Tutoriels Linux >  >> Debian

Comment économiser du trafic avec nginxs HttpGzipModule sur Debian Jessie

Dans ce tutoriel, je vais décrire comment configurer HttpGzipModule sur un serveur Web nginx (sur Debian Jessie). HttpGzipModule permet à nginx de compresser des fichiers et de les livrer aux clients (par exemple, les navigateurs) qui peuvent gérer le contenu compressé, ce que font la plupart des navigateurs modernes. Avec HttpGzipModule, vous pouvez compresser des fichiers HTML, CSS, Javascript, texte ou XML à env. 20 à 30 % de leur taille d'origine, ce qui vous permet d'économiser du trafic sur le serveur et de rendre les utilisateurs de votre modem plus heureux.

La compression des fichiers entraîne une charge légèrement plus élevée sur le serveur, mais d'après mon expérience, cela est compensé par le fait que les temps de connexion des clients à votre serveur diminuent beaucoup. Par exemple, un utilisateur de modem qui avait besoin de sept secondes pour télécharger un fichier HTML non compressé pourrait désormais n'avoir besoin que de deux secondes pour le même fichier, mais compressé.

En utilisant HttpGzipModule, vous n'avez pas à craindre d'exclure les utilisateurs avec des navigateurs plus anciens qui ne peuvent pas gérer le contenu compressé. Le navigateur négocie avec le serveur avant le transfert de tout fichier, et si le navigateur n'a pas la capacité de gérer le contenu compressé, le serveur fournit les fichiers non compressés.

1 Remarque préliminaire

Je suppose que vous avez une configuration nginx fonctionnelle sur votre serveur Debian, par exemple. comme indiqué dans ce tutoriel : Installation de Nginx avec PHP (en tant que PHP-FPM) et MariaDB (LEMP) sur Debian 8

2 Configuration de HttpGzipModule

Ouvrez /etc/nginx/nginx.conf :

nano /etc/nginx/nginx.conf

Vous constaterez que la compression gzip est déjà activée (dans la section http {}) :

[...]
http {
[...]
##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

[...] } [...]

gzip activé ; active la compression gzip.

gzip_disable "MSIE [1-6]\.(?!.*SV1)" ; désactive la compression gzip pour les navigateurs qui ne la prennent pas en charge (dans ce cas, MS Internet Explorer avant la version 6 SV1).

Bien sûr, nous pouvons affiner cette configuration (vous pouvez trouver une liste des directives de configuration possibles sur http://nginx.org/en/docs/http/ngx_http_gzip_module.html) :

gzip_http_version 1.1 ; - Cela active la compression gzip pour la version 1.1 de la requête HTTP. Comme l'en-tête Content-Length n'est pas défini, cela rendra les Keepalives impossibles avec la version 1.0.

gzip_vary activé ; - Cela définit l'en-tête de réponse Vary :Accept-Encoding. Certains proxys ont un bogue en ce sens qu'ils servent du contenu compressé aux navigateurs qui ne le prennent pas en charge. En définissant l'en-tête Vary :Accept-Encoding, vous demandez aux proxys de stocker à la fois une version compressée et non compressée du contenu.

gzip_comp_level 6 ; - Il s'agit du niveau de compression (entre 1 et 9) où 1 est la moins de compression (la plus rapide) et 9 est la plus (la plus lente).

gzip_proxied n'importe lequel ; - Cela configure la manière dont les requêtes provenant d'un proxy doivent être traitées. n'importe quel moyen active la compression pour toutes les requêtes.

gzip_types texte/texte brut/texte html/application css/application json/texte x-javascript/application xml/application xml/texte xml+rss/application javascript/texte javascript/x-js ; - Cela indique à nginx quels types de fichiers compresser (text/html est toujours compressé). Comme les fichiers Javascript peuvent avoir différents types de fichiers sur chaque serveur, j'ai inclus plusieurs types MIME Javascript possibles (il en va de même pour XML).

gzip_buffers 16 8k; - Ceci affecte le nombre et la taille des tampons de compression. La valeur par défaut est gzip_buffers 4 4k; ou gzip_buffers 4 8k;, mais j'ai augmenté cette valeur pour m'assurer que les gros fichiers Javascript ou CSS peuvent également être compressés.

Ma configuration finale ressemble donc à ceci :

[...]
http {
    [...]
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
    gzip_buffers 16 8k;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    [...]
}
[...]

Recharger nginx :

service nginx reload

3 Tests

Pour tester si votre configuration fonctionne, vous pouvez utiliser les outils de développement dans Firefox ou Google Chrome et accéder à un fichier texte via Firefox (par exemple, une page HTML statique). Dans la sortie des en-têtes HTTP, vous devriez maintenant voir que le client (Firefox) a envoyé un en-tête Accept-Encoding:gzip,deflate pour indiquer au serveur qu'il accepte le contenu compressé aux formats gzip et deflate ; le serveur doit compresser le fichier et l'envoyer avec un en-tête Content-Encoding :gzip (comme vous le voyez dans cet exemple, nginx définit également l'en-tête Vary :Accept-Encoding) :

  • Module HttpGzip de nginx : http://nginx.org/en/docs/http/ngx_http_gzip_module.html
  • Debian :http://www.debian.org/

Debian
  1. Comment installer Proxmox VE 4 sur Debian 8 (Jessie)

  2. Comment déployer un serveur DNS dynamique avec Docker sur Debian 10

  3. Comment installer le serveur HTTP Git avec Nginx sur Debian 11

  4. Comment installer WebDAV avec Lighttpd sur Debian 8 (Jessie)

  5. Comment configurer un pare-feu avec CSF sur Debian 9

Comment configurer un serveur de messagerie avec Modoboa sur Debian 10

Comment installer le serveur FTP vsftpd avec TLS sur Debian 10

Comment activer le protocole HTTP2 avec Nginx sur Debian 8 Jessie Server

Comment configurer LAMP avec Debian 11

Comment configurer le serveur Samba avec Debian 11

Comment installer Nginx avec PHP-FPM sur Debian 11