Cómo instalar Nginx con compresión Brotli en Ubuntu
Nginx (engine-x) es un servidor HTTP de código abierto de alto rendimiento, proxy inverso y servidor proxy IMAP/POP3. Las características más destacadas de Nginx son su estabilidad, un rico conjunto de funciones, una configuración sencilla y un bajo consumo de memoria.
Brotli es un algoritmo de compresión de código abierto creado por Google. Brotli proporciona una compresión mejor y sin pérdidas que gzip, y ahora es compatible con los principales navegadores y servidores web.
Más información sobre el rendimiento de Brotli:
- Akamai blog post.
- Publicación de Cloudflare sobre Brotli.
- Publicación en el blog de Mozilla.
En este tutorial, te mostraré paso a paso cómo añadir soporte para el algoritmo de compresión Brotli en el servidor web Nginx. Construiremos un paquete nginx personalizado que soporte el algoritmo de compresión brotli. Utilizaremos la última versión de Ubuntu, además de construir un paquete nginx para el sistema operativo Debian.
Requisitos previos
- Ubuntu 18.04
- Privilegios de root
¿Qué vamos a hacer?
- Instalar las dependencias de compilación
- Instalar Nginx con ngx_brotli
- Añadir repositorio de Nginx
- Descargar Nginx y ngx_brotli
- Construir Nginx con soporte ngx_brotli
- Instalar Nginx y activar la compatibilidad con ngx_brotli
- Configurar el host virtual de Nginx
- Probar
Paso 1 – Instalar las dependencias de compilación
Lo primero que necesitamos para esta guía es instalar las dependencias de compilación en el sistema.
Actualiza el repositorio de Ubuntu y luego instala todos los paquetes build dependencies utilizando un comando apt de los que aparecen a continuación.
sudo apt update sudo apt install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
Espera a que se instalen todos los paquetes.
Paso 2 – Instalar Nginx con ngx_brotli
En este paso, instalaremos el paquete nginx personalizado que soporta el algoritmo de compresión brotli en el sistema Ubuntu. Y utilizaremos la última versión estable del paquete nginx que se puede descargar desde el repositorio oficial de nginx.
Añadir el repositorio nginx
Antes de añadir el repositorio nginx, añade el signo de llave nginx utilizando el comando que aparece a continuación.
curl -L https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
Ahora crea un nuevo archivo de repositorio nginx ‘nginx.list’ en el directorio ‘/etc/apt/sources.list.d’ utilizando el editor vim.
vim /etc/apt/sources.list.d/nginx.list
Pega la configuración de abajo.
deb http://nginx.org/packages/ubuntu/ bionic nginx deb-src http://nginx.org/packages/ubuntu/ bionic nginx
Guarda y sal.
Ahora actualiza los repositorios de ubuntu.
sudo apt-get update
Se ha añadido el repositorio de Nginx.
Descarga los archivos fuente de Nginx y ngx_brotli
Ahora descargaremos los paquetes Nginx del repositorio nginx utilizando el comando apt.
Ve al directorio ‘/usr/local/src’ y descarga el código fuente de Nginx utilizando el siguiente comando apt.
cd /usr/local/src sudo apt source nginx
Ahora instala todas las dependencias de paquetes necesarias para nginx.
sudo apt build-dep nginx -y
Y una vez completada la instalación, clona el código fuente ‘ngx_brotli’ de GitHub.
git clone --recursive https://github.com/google/ngx_brotli.git
Nginx y ngx_brotli se han descargado.
Construir Nginx con soporte para ngx_brotli
Ahora necesitamos editar la regla de compilación por defecto de Nginx, necesitamos añadir el ngx_brotli a la regla de compilación de los paquetes.
Ve al directorio ‘/usr/local/src/nginx-*’ y edita la configuración debian ‘rules’.
cd /usr/local/src/nginx-*/ vim debian/rules
Ahora tendrás dos entornos de compilación para ‘config.env.nginx‘ y‘config.env.nginx_debug‘. Añade la opción ‘–add-module=’ para ngx_brotli a ambos entornos de construcción.
--add-module=/usr/local/src/ngx_brotli
Guarda y sal.
Y ya estamos listos para compilar y construir el paquete nginx con soporte para ngx_brotli.
Ejecuta el siguiente comando dpkg.
sudo dpkg-buildpackage -b -uc -us
Nota:
- -b: Build binary-only, no source files.
- -uc : Archivo .buildinfo y .changes sin firmar.
- -us: paquete fuente sin firmar.
Cuando finalice la compilación, obtendrás los paquetes nginx-*.deb en el directorio ‘/usr/local/src’ como se muestra a continuación.
ls -lah
Instalar Nginx y activar la compatibilidad con Brotli
La compilación de nginx con ngx_brotli se ha completado, instala los paquetes nginx-*.deb utilizando el comando dpkg que se muestra a continuación.
cd /usr/local/src/ sudo dpkg -i *.deb
Nginx con el soporte ngx_brotli ha sido instalado.
Ahora ve al directorio de configuración ‘/etc/nginx’ y edita el archivo de configuración ‘nginx.conf’.
cd /etc/nginx/ vim nginx.conf
Habilita el ngx_brotli en nginx añadiendo la configuración de abajo dentro de la sección ‘http {…}’.
brotli on; brotli_comp_level 6; brotli_static on; brotli_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/vnd.microsoft.icon image/bmp image/svg+xml;
Guarda y sal.
Prueba la configuración de nginx y asegúrate de que no se produce ningún error.
nginx -t
El soporte de compresión brotli ha sido habilitado.
Paso 3 – Configurar el Host Virtual Nginx
En este paso, intentaremos crear un nuevo host virtual para el nombre de dominio nginx.hakase-labs.io.
Nota:
- La compresión Brotli sólo admite el sitio HTTPS, así que asegúrate de que tienes los archivos de certificado para tu nombre de dominio, o puedes generar certificados SSL Letsencrypt gratuitos.
Ve al directorio de configuración ‘/etc/nginx’ y crea una nueva configuración de host virtual ‘brotli.conf’.
cd /etc/nginx/ vim conf.d/brotli.conf
Pega allí la siguiente configuración de host virtual nginx.
# Redirect HTTP to HTTPS Nginx server { listen 80; server_name nginx.hakase-labs.io; return 301 https://$host$request_uri; } # SSL configuration server { listen 443 ssl http2; server_name nginx.hakase-labs.io; ssl_certificate /etc/letsencrypt/live/nginx.hakase-labs.io/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nginx.hakase-labs.io/privkey.pem; # Improve HTTPS performance with session resumption ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; # Enable server-side protection against BEAST attacks ssl_prefer_server_ciphers on; ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5; # Disable SSLv3 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # web root directory location / { root /usr/share/nginx/html; } }
Guarda y sal.
Nota:
- Cambia el nombre de dominio por tu propio dominio.
- Cambia la ruta de los certificados SSL.
Ahora prueba la configuración de nginx y asegúrate de que no hay ningún error, luego reinicia el servicio.
nginx -t systemctl restart nginx
El nuevo host virtual nginx ha sido añadido.
Paso 4 – Pruebas
Abre tu navegador web y escribe el nombre de dominio, el mío es
http://nginx.hakase-labs.io
Ahora serás redirigido a la conexión https. Haz clic con el botón derecho en la página y haz clic en‘Inspeccionar elemento‘. Haz clic en la pestaña‘Red‘ y vuelve a cargar la página.
Haz clic en el detalle de solicitudes y obtendrás todas las cabeceras de solicitud y respuesta del servidor web, como se muestra a continuación.
En la sección ‘Cabeceras de respuesta’, verás el ‘content-encoding: br’ para soporte brotli.
Ahora, si quieres hacer otra prueba, puedes utilizar el comando curl como se muestra a continuación.
curl -H 'Accept-Encoding: br' -I https://nginx.hakase-labs.io
Y verás el resultado ‘content-encoding: br’ para soporte brotli.
La instalación de Nginx con soporte para compresión Brotli en Ubuntu 18.04 se ha completado con éxito.