Cómo habilitar la compresión brotli en nginx

Cómo habilitar la compresión brotli en nginx

La compresión de Brotli es una técnica de compresión de propósito genérico ampliamente compatible con los navegadores. Es comparable a los métodos de compresión disponibles actualmente, ya que ofrece relaciones de compresión 20-26% mejores. Sin embargo, no es bueno a menos que el servidor web envíe recursos basados ​​en texto comprimidos con el algoritmo 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 lograr 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 toman un tiempo de carga y transferencia baja. Sin embargo, tiene un precio. Los servidores utilizan muchos recursos computacionales para proporcionar una mejor tasa de compresión. Por lo tanto, mejor, mejor. Por lo tanto, se agrega una gran cantidad de esfuerzo para mejorar los formatos de compresión al tiempo que utiliza ciclos mínimos de CPU.

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

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 referencias hacia atrás. El tamaño de la ventana deslizante de Brotli varía de 1 kb a 16 MB. En contraste, 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 Desinflar, que no es relevante ya que los archivos de texto mayores de 32 kb rara vez se encuentran en servidores web.

La compatibilidad de compresión del servidor es importante

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

Aceptar- ending = ”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 es compatible con GZIP, entonces el encabezado se ve así:

Content-ending = "gzip"

Encabezados de los navegadores como Firefox que admiten la compresión Brotli y el servidor web que tiene un módulo Brotli instalado para verse como estos:

Aceptar- ending = ”Deflate, Gzip, BR"
Content-ending = "gzip, br"

Por lo tanto, si el navegador utiliza el mejor formato de compresión y el servidor web no lo hace, no es bueno, ya que el servidor web no enviará 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 Actualización de apt-get Su distribución de Ubuntu y escriba los siguientes comandos en su terminal Bash.

ubuntu@ubuntu: ~ $ sudo apt-get actualización
ubuntu@ubuntu: ~ $ sudo apt -get install nginx -y
ubuntu@ubuntu: ~ $ sudo Service Nginx Start

Para habilitar la compresión brotli en el nginx, compilaremos nuestro .Entonces, módulos según los detalles de nuestra versión nginx. Como se muestra, escribir el siguiente comando emitirá la versión Nginx:

ubuntu@ubuntu: ~ $ nginx -v
Versión Nginx: Nginx/1.18.0 (Ubuntu)

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

ubuntu@ubuntu: ~ $ wget https: // nginx.org/descargar/nginx-1.18.0.alquitrán.GZ
--2021-02-07 02: 57: 33-- https: // nginx.org/descargar/nginx-1.18.0.alquitrán.GZ
Resolviendo 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, en espera de respuesta ... 200 OK
Longitud: 1039530 (1015k) [aplicación/octet-stream]
Guardar para: 'Nginx-1.18.0.alquitrán.gz '
nginx-1.18.0.alquitrán.GZ 100%[================================================= ====================>] 1015k 220kb/s en 4.8s
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 *.Entonces binarios para la compresión brotli. Ahora extraiga el archivo usando el siguiente comando.

ubuntu@ubuntu: ~ $ 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. Git-clonaremos el módulo del repositorio de Google.

ubuntu@ubuntu: ~ $ git clon 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.

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

Nota: puede recibir el siguiente error al configurar

./Configurar: 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
Estadicalmente de la fuente con Nginx usando-with-pcre = opción.

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

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

Compilación de módulos

Usaremos el hacer comandar para crear un módulos carpeta dentro del Nginx-1.18.0 Directorio.

ubuntu@ubuntu: ~ $ sudo hacer módulos

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

ubuntu@ubuntu: ~ $ cd /nginx-1.18.0/objs/
ubuntu@ubuntu: ~ $ sudo cp ngx_http_brotli*.entonces /usr/share/nginx/módulos

Ahora enumere el contenido de los archivos utilizando el LS dominio. Notarás que consta de dos archivos de módulos diferentes, yo.mi.:

ubuntu@ubuntu: ~ $ ls ngx_http_brotli*.entonces
ngx_http_brotli_filter_module.entonces
ngx_http_brotli_static_module.entonces
  • Módulo Brotli regular: NGX_HTTP_BROTLI_FILTER_MODULE.Entonces, el módulo comprime todos los archivos sobre la mosca y, por lo tanto, requiere más recursos computacionales
  • Módulo Brotli estático: Ngx_http_brotli_static_module.Por lo tanto, el módulo le permite servir archivos estáticos precomprimidos, por lo tanto, menos intensivo en recursos.

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

ubuntu@ubuntu: ~ $ sudo vim/etc/nginx/nginx.confusión
# Sección de módulo de carga
módulos load_module "/ngx_http_brotli_filter_module.entonces";
módulos load_module "/ngx_http_brotli_static_module.entonces";

También incluiremos rutas de carpetas de configuración /etc/nginx/conf.d/*.confusión

y /usr/share/nginx/módulos/*.confusión En el archivo anterior, como:

http
# Incluir carpetas de configuración
incluir/etc/nginx/conf.d/*.conf;
incluir/usr/share/nginx/módulos/*.conf;

Para agregar la configuración brotli, abra el/etc/nginx/conf.d/brotli.confusión

archivo en el empuje Editor y habilite Brotli configurando las siguientes directivas de configuración:

brotli on;
brotli_static on;
brotli_comp_level 6;
Brotli_Types Application/RSS+XML Application/XHTML+XML
texto/CSS Texto/Plain;

El "brotli apagado |"El valor habilita o deshabilita la dinámica o en la compresión de la mosca del contenido.

El 'brotli_ static on ' habilita el servidor NGINX para verificar si los archivos precompresados ​​con el .Br extensiones existen o no. También podemos convertir esta configuración en una opción apagado o siempre. El siempre El valor permite que el servidor envíe contenido precomprimido sin confirmar si el navegador lo admite o no. Dado que Brotli es intensivo en recursos, este módulo es el más adecuado para reducir las situaciones de cuello de botella.

El "brotli_comp_level 6"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 de MIME específicos, mientras que las respuestas de texto/HTML siempre se comprimen. La sintaxis predeterminada para esta directiva es brotli_types [tipo mime]. Puede encontrar más sobre la directiva de configuración en GitHub.

Guarde los cambios, reinicie el servicio NGINX escribiendo "SUDO Service reiniciar nginx" Y todo está hecho.

Conclusión

Después de los cambios, notará algunas mejoras obvias en las métricas de rendimiento. Sin embargo, viene con un ligero inconveniente del aumento de la carga de la CPU en las horas pico. Para evitar tales situaciones, vigile el uso de la CPU; Si alcanza el 100% regularmente, podemos utilizar muchas opciones según nuestras preferencias, como presentar contenido precompresado o estático, bajar el nivel de compresión y apagar la compresión sobre la marcha, entre muchos.