Nginx

Cómo habilitar la compresión Brotli en Nginx

Cómo habilitar la compresión Brotli en Nginx

La compresión Brotli es una técnica de compresión de propósito genérico ampliamente compatible con todos los navegadores. Es comparable a los métodos de compresión disponibles actualmente, ya que ofrece un 20-26% mejores relaciones de compresión. Sin embargo, no es bueno a menos que el servidor web envíe recursos basados ​​en texto comprimido con el algoritmo de Brotli.

En este artículo, aprenderemos cómo funciona la compresión en el servidor y por qué es útil? También aprenderemos a instalar el servidor Nginx y conseguir que nuestro servidor proporcione archivos comprimidos Brotli.

Fondo

Las técnicas / algoritmos de compresión mejoran el rendimiento del sitio web al reducir el tamaño del contenido. Por lo tanto, los datos comprimidos requieren poca carga y tiempo de transferencia. Sin embargo, tiene un precio. Los servidores utilizan una gran cantidad de recursos computacionales para proporcionar una mejor tasa de compresión. Por lo tanto, cuanto mejor, más caro. Por lo tanto, se agrega un gran esfuerzo para mejorar los formatos de compresión mientras se utilizan ciclos mínimos de CPU.

Por ahora, el formato de compresión más potencial era gzip. Recientemente, gzip fue reemplazado por un nuevo algoritmo de compresión conocido como Brotli. Es un algoritmo de compresión avanzado compuesto por la codificación Huffman, el algoritmo L77 y el modelado de contexto. Por el contrario, Gzip se basa en el algoritmo Deflate.

El formato de compresión sin pérdidas, diseñado por Google, está estrechamente relacionado con el formato de compresión desinflado. Ambos métodos de compresión utilizan ventanas deslizantes para referenciar hacia atrás. El tamaño de la ventana deslizante Brotli varía de 1 KB a 16 MB. Por el contrario, Gzip tiene un tamaño de ventana fijo de 32 KB. Eso significa que la ventana de Brotli es 512 veces más grande que la ventana de desinflado, lo cual no es relevante ya que los archivos de texto de más de 32 KB rara vez se encuentran en los servidores web.

La compatibilidad con la compresión del servidor es importante

Siempre que descargamos un archivo del navegador, el navegador solicita al servidor qué tipo de compresión admite a través de un encabezado. Por ejemplo, si el navegador admite gzip y desinflar descomprimir. Agregará estas opciones en su Aceptar codificación, encabezado, yo.mi.,

Accept-Encoding = "deflate, gzip"

Por lo tanto, los navegadores que no admiten estos formatos no los incluirán en el encabezado. Cuando el servidor responde con el contenido, le dice al navegador sobre el formato de compresión a través de un encabezado, Codificación de contenido. Por lo tanto, si admite gzip, el encabezado se verá así:

Codificación de contenido = "gzip"

Los encabezados de los navegadores como Firefox que admiten la compresión Brotli y el servidor web que tiene un módulo Brotli instalado tienen el siguiente aspecto:

Accept-Encoding = "deflate, gzip, br"
Codificación de contenido = "gzip, br"

Por lo tanto, si el navegador utiliza el mejor formato de compresión y el servidor web no, no es bueno, ya que el servidor web no devolverá los archivos con el algoritmo de compresión preferido. Por eso es importante instalar el módulo de compresión para el servidor web.

Instalación del servidor

Antes de seguir adelante con la configuración de Brotli, configuraremos nuestro servidor Nginx. Antes de que sudo apt-get update su distribución de Ubuntu y escriba los siguientes comandos en su terminal bash.

[correo electrónico protegido]: ~ $ sudo apt-get update
[correo electrónico protegido]: ~ $ sudo apt-get install nginx -y
[correo electrónico protegido]: ~ $ sudo service nginx start

Para habilitar la compresión Brotli en Nginx, compilaremos nuestro .por lo que los módulos según los detalles de nuestra versión de Nginx. Como se muestra, escribir el siguiente comando generará la versión de Nginx:

[correo electrónico protegido]: ~ $ nginx -v
versión de nginx: nginx / 1.18.0 (Ubuntu)

Utilizar el wget comando junto con el detalle de la versión de nginx para descargar el código fuente del sitio web de Nginx.

[correo electrónico protegido]: ~ $ wget https: // nginx.org / download / nginx-1.18.0.alquitrán.gz
--2021-02-07 02: 57: 33-- https: // nginx.org / download / nginx-1.18.0.alquitrán.gz
Resolución de nginx.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2a05: d014: edb: 5702 :: 6,…
Conectando a nginx.org (nginx.org) | 3.125.197.172 |: 443… conectado.
Solicitud HTTP enviada, esperando respuesta ... 200 OK
Longitud: 1039530 (1015K) [application / octet-stream]
Guardando en: 'nginx-1.18.0.alquitrán.gz '
nginx-1.18.0.alquitrán.gz 100% [============================================ ====================>] 1015K 220KB / s en 4.8 s
2021-02-07 02:57:38 (212 KB / s) - 'nginx-1.18.0.alquitrán.gz 'guardado [1039530/1039530]

Usaremos este código fuente para compilar *.binarios para la compresión Brotli. Ahora extraiga el archivo usando el siguiente comando.

[correo electrónico protegido]: ~ $ tar xzf nginx-1.18.0.alquitrán.gz

Configuración del módulo Brotli

Ahora Google ha lanzado el módulo Brotli para Nginx. Clonaremos el módulo del repositorio de Google.

[correo electrónico protegido]: ~ $ git clone https: // github.com / google / ngx_brotli --recursivo.

Lo haremos CD en el nginx-1.18.0 carpeta para configurar el módulo Brotli dinámico.

[correo electrónico protegido]: ~ $ cd nginx-1.18.0 /
[correo electrónico protegido]: ~ $ sudo ./ configure --with-compat --add-dynamic-module =… / ngx_brotli

Nota: Puede recibir el siguiente error al configurar

./ configure: error: el módulo de reescritura HTTP requiere la biblioteca PCRE.
Puede deshabilitar el módulo usando --without-http_rewrite_module
opción, o instale la biblioteca PCRE en el sistema, o cree la biblioteca PCRE
estáticamente de la fuente con nginx usando --with-pcre = opción.

En ese caso, ejecute el siguiente comando para instalar la biblioteca pcre

[correo electrónico protegido]: ~ $ sudo apt-get install libpcre3-dev -y

Compilación del módulo

Usaremos el fabricar comando para crear un módulos carpeta dentro del nginx-1.18.0 directorio.

[correo electrónico protegido]: ~ $ sudo make módulos

Usamos el cp comando para copiar ngx_http_brotli *.entonces archivos del nginx-1.18.0 / objs carpeta a la carpeta de módulos.

[correo electrónico protegido]: ~ $ cd / nginx-1.18.0 / objs /
[correo electrónico protegido]: ~ $ sudo cp  ngx_http_brotli *.entonces / usr / share / nginx / modules

Ahora enumere el contenido de los archivos usando el ls mando. Notará que consta de dos archivos de módulo diferentes, yo.mi.:

[correo electrónico protegido]: ~ $ ls ngx_http_brotli *.entonces
ngx_http_brotli_filter_module.entonces
ngx_http_brotli_static_module.entonces
  • Módulo Brotli regular: El ngx_http_brotli_filter_module.por lo que el módulo comprime todos los archivos sobre la marcha y, por lo tanto, requiere más recursos computacionales
  • Módulo Brotli estático: El ngx_http_brotli_static_module.por lo que el módulo le permite servir archivos estáticos precomprimidos, por lo tanto, consume menos recursos.

Ahora use su editor favorito para abrir / etc / nginx / nginx.conf para agregar módulos de carga Brotli para comenzar la configuración de Brotli al incluir las siguientes líneas:

[correo electrónico protegido]: ~ $ sudo vim / etc / nginx / nginx.conf
# Sección de módulo de carga
load_module "módulos / ngx_http_brotli_filter_module.entonces";
load_module "módulos / ngx_http_brotli_static_module.entonces";

También incluiremos las rutas de las carpetas de configuración / etc / nginx / conf.D/*.conf

y / usr / share / nginx / modules / *.conf en el archivo anterior como:

http
# Incluir carpetas de configuración
incluir / etc / nginx / conf.D/*.conf;
incluir / usr / share / nginx / modules / *.conf;

Para agregar la configuración de Brotli, abra / etc / nginx / conf.d / brotli.conf

archivo en el empuje editor y habilite Brotli estableciendo las siguientes directivas de configuración:

brotli on;
brotli_static on;
brotli_comp_level 6;
aplicación brotli_types / rss + aplicación xml / xhtml + xml
texto / texto css / plano;

La "brotli apagado | encendido”El valor habilita o deshabilita la compresión dinámica o sobre la marcha del contenido.

La 'brotli_ static on ' permite que el servidor Nginx compruebe si los archivos precomprimidos con la .br las extensiones existen o no. También podemos convertir esta configuración en una opción apagado o siempre. La siempre El valor permite al servidor enviar contenido precomprimido sin confirmar si el navegador lo admite o no. Dado que Brotli consume muchos recursos, este módulo es el más adecuado para reducir las situaciones de cuello de botella.

La "brotli_comp_level 6”La directiva establece el nivel de calidad de compresión dinámica en 6. Puede variar de 0 a 11.

Por último, habilite la compresión dinámica para tipos MIME específicos, mientras que las respuestas de texto / html siempre están comprimidas. La sintaxis predeterminada para esta directiva es brotli_types [tipo de mímica]. Puede encontrar más sobre la directiva de configuración en Github.

Guarde los cambios, reinicie el servicio Nginx escribiendo "Reinicio del servicio sudo nginx" y todo esta hecho.

Conclusión

Después de los cambios, notará algunas mejoras obvias en las métricas de rendimiento. Sin embargo, viene con un pequeño inconveniente de una mayor carga de CPU en las horas pico. Para evitar tales situaciones, vigile el uso de la CPU; si alcanza el 100% con regularidad, podemos utilizar muchas opciones según nuestras preferencias, como presentar contenido precomprimido o estático, reducir el nivel de compresión y desactivar la compresión sobre la marcha, entre muchas otras.

Cómo cambiar los botones izquierdo y derecho del mouse en una PC con Windows 10
Es una norma que todos los dispositivos de mouse de computadora estén diseñados ergonómicamente para usuarios diestros. Pero hay dispositivos de mouse...
Emule los clics del mouse colocando el mouse con Clickless Mouse en Windows 10
El uso excesivo de un mouse o teclado en una postura incorrecta puede provocar muchos problemas de salud, como tensión, síndrome del túnel carpiano y ...
Agregue gestos del mouse a Windows 10 con estas herramientas gratuitas
En los últimos años, las computadoras y los sistemas operativos han evolucionado enormemente. Hubo un momento en que los usuarios tenían que usar coma...