GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo ahorrar tráfico con nginxs HttpGzipModule en Debian Jessie

En este tutorial, describiré cómo configurar HttpGzipModule en un servidor web nginx (en Debian Jessie). HttpGzipModule permite que nginx comprima archivos y los entregue a clientes (por ejemplo, navegadores) que pueden manejar contenido comprimido como lo hacen la mayoría de los navegadores modernos. Con HttpGzipModule, puede comprimir archivos HTML, CSS, Javascript, texto o XML a aprox. 20 - 30% de sus tamaños originales, lo que le permite ahorrar tráfico en el servidor y hacer que los usuarios de su módem sean más felices.

La compresión de archivos provoca una carga ligeramente mayor en el servidor, pero en mi experiencia, esto se compensa con el hecho de que los tiempos de conexión de los clientes a su servidor disminuyen mucho. Por ejemplo, un usuario de módem que necesitaba siete segundos para descargar un archivo HTML sin comprimir ahora solo necesita dos segundos para el mismo archivo comprimido.

Al usar HttpGzipModule, no debe tener miedo de excluir a los usuarios con navegadores más antiguos que no pueden manejar contenido comprimido. El navegador negocia con el servidor antes de que se transfiera cualquier archivo, y si el navegador no tiene la capacidad de manejar contenido comprimido, el servidor entrega los archivos sin comprimir.

1 nota preliminar

Supongo que tiene una configuración de nginx en funcionamiento en su servidor Debian, p. como se muestra en este tutorial: Instalación de Nginx con PHP (como PHP-FPM) y MariaDB (LEMP) en Debian 8

2 Configuración de HttpGzipModule

Abra /etc/nginx/nginx.conf:

nano /etc/nginx/nginx.conf

Encontrará que la compresión gzip ya está habilitada (en la sección http {}):

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

gzip on;
gzip_disable "msie6";

[...] } [...]

gzip activado; habilita la compresión gzip.

gzip_disable "MSIE [1-6]\.(?!.*SV1)"; deshabilita la compresión gzip para los navegadores que no la admiten (en este caso, MS Internet Explorer antes de la versión 6 SV1).

Por supuesto, podemos ajustar esta configuración (puede encontrar una lista de posibles directivas de configuración en http://nginx.org/en/docs/http/ngx_http_gzip_module.html):

gzip_http_versión 1.1; - Esto habilita la compresión gzip para la versión de solicitud HTTP 1.1. Como el encabezado Content-Length no está configurado, esto hará que Keepalives sea imposible con la versión 1.0.

gzip_vary activado; - Esto establece el encabezado de respuesta Vary:Accept-Encoding. Algunos proxies tienen un error en el sentido de que envían contenido comprimido a navegadores que no lo admiten. Al establecer el encabezado Vary:Accept-Encoding, le indica a los proxies que almacenen una versión comprimida y sin comprimir del contenido.

gzip_comp_nivel 6; - Este es el nivel de compresión (entre 1 y 9) donde 1 es la menor compresión (más rápida) y 9 es la mayor (más lenta).

gzip_proxied cualquiera; - Esto configura cómo se deben manejar las solicitudes provenientes de un proxy. cualquier medio habilita la compresión para todas las solicitudes.

gzip_types texto/texto sin formato/texto html/aplicación css/aplicación json/texto x-javascript/aplicación xml/aplicación xml/xml+texto rss/aplicación javascript/texto javascript/x-js; - Esto le dice a nginx qué tipos de archivos comprimir (el texto/html siempre está comprimido). Como los archivos de Javascript pueden tener diferentes tipos de archivos en cada servidor, he incluido varios tipos posibles de MIME de Javascript (lo mismo ocurre con XML).

gzip_buffers 16 8k; - Esto asigna el número y el tamaño de los buffers de compresión. El valor predeterminado es gzip_buffers 4 4k; o gzip_buffers 4 8k;, pero aumenté ese valor para asegurarme de que los archivos grandes de Javascript o CSS también se puedan comprimir.

Así que mi configuración final es la siguiente:

[...]
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)";
    [...]
}
[...]

Recargar nginx:

service nginx reload

3 Pruebas

Para probar si su configuración funciona, puede usar las herramientas para desarrolladores en Firefox o Google Chrome y acceder a un archivo de texto a través de Firefox (por ejemplo, una página HTML estática). En la salida de los encabezados HTTP, ahora debería ver que el cliente (Firefox) envió un encabezado Accept-Encoding:gzip,deflate para decirle al servidor que acepta contenido comprimido en los formatos gzip y deflate; el servidor debe comprimir el archivo y enviarlo con un encabezado Content-Encoding:gzip (como se ve en este ejemplo, nginx también establece el encabezado Vary:Accept-Encoding):

4 Enlaces

  • Nginx HttpGzipModule: http://nginx.org/en/docs/http/ngx_http_gzip_module.html
  • Debian:http://www.debian.org/

Debian
  1. Cómo instalar Proxmox VE 4 en Debian 8 (Jessie)

  2. Cómo implementar un servidor DNS dinámico con Docker en Debian 10

  3. Cómo instalar el servidor HTTP Git con Nginx en Debian 11

  4. Cómo instalar WebDAV con Lighttpd en Debian 8 (Jessie)

  5. Cómo configurar un cortafuegos con CSF en Debian 9

Cómo configurar un servidor de correo con Modoboa en Debian 10

Cómo instalar el servidor FTP vsftpd con TLS en Debian 10

Cómo habilitar el protocolo HTTP2 con Nginx en Debian 8 Jessie Server

Cómo configurar LAMP con Debian 11

Cómo configurar el servidor Samba con Debian 11

Cómo instalar Nginx con PHP-FPM en Debian 11