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:

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?

  1. Instalar las dependencias de compilación
  2. 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
  3. Configurar el host virtual de Nginx
  4. 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.

Añadir repositorio 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.

Descarga los archivos fuente de Nginx y ngx_brotli

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.

Construir Nginx con soporte ngx_brotli

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

Paquete completo

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

Instalar Nginx y activar la compatibilidad con Brotli

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.

Configuración de Nginx

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.

Página de prueba de Nginx

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.

Codificación Brotli

La instalación de Nginx con soporte para compresión Brotli en Ubuntu 18.04 se ha completado con éxito.

Referencias

Scroll al inicio