Nginx (engine-x) es un servidor HTTP de código abierto de alto rendimiento, proxy inverso y servidor proxy IMAP/POP3. Las características sobresalientes de Nginx son la estabilidad, un amplio conjunto de funciones, una configuración simple 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:
- Publicación de blog de Akamai.
- Publicación de Cloudflare sobre Brotli.
- Entrada de blog de Mozilla.
En este tutorial, le mostraré paso a paso cómo agregar soporte para el algoritmo de compresión Brotli en el servidor web Nginx. Crearemos un paquete nginx personalizado que admita el algoritmo de compresión brotli. Usaremos la última versión de Ubuntu, además, crearemos un paquete nginx para el sistema operativo Debian.
Requisitos
- Ubuntu 18.04
- Privilegios de raíz
¿Qué haremos?
- Instalar dependencias de compilación
- Instalar Nginx con ngx_brotli
- Añadir repositorio Nginx
- Descargar Nginx y ngx_brotli
- Compila Nginx con la compatibilidad con ngx_brotli
- Instalar Nginx y habilitar la compatibilidad con ngx_brotli
- Configurar host virtual Nginx
- Pruebas
Paso 1:instalar dependencias de compilación
Lo primero que necesitamos para esta guía es instalar las dependencias de compilación en el sistema.
Actualice el repositorio de Ubuntu y luego instale todas las dependencias de compilación de paquetes usando un comando apt a continuación.
sudo apt update
sudo apt install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
Espere a que se instalen todos los paquetes.
Paso 2:instalar Nginx con ngx_brotli
En este paso, instalaremos el paquete nginx personalizado que admite el algoritmo de compresión brotli en el sistema Ubuntu. Y usaremos la última versión estable del paquete nginx que se puede descargar del repositorio oficial de nginx.
Añadir repositorio Nginx
Antes de agregar el repositorio nginx, agregue el signo de clave nginx usando el siguiente comando.
curl -L https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
Ahora cree un nuevo archivo de repositorio nginx 'nginx.list' en el directorio '/etc/apt/sources.list.d' usando el editor vim.
vim /etc/apt/sources.list.d/nginx.list
Pegue la configuración a continuación.
deb http://nginx.org/packages/ubuntu/ bionic nginx deb-src http://nginx.org/packages/ubuntu/ bionic nginx
Guardar y salir.
Ahora actualice los repositorios de ubuntu.
sudo apt-get update
Se ha agregado el repositorio Nginx.
Descargar archivos fuente de Nginx y ngx_brotli
Ahora vamos a descargar los paquetes de Nginx desde el repositorio de nginx usando el comando apt.
Vaya al directorio '/usr/local/src' y descargue la fuente de Nginx usando el comando apt a continuación.
cd /usr/local/src
sudo apt source nginx
Ahora instale todas las dependencias de paquetes necesarias para nginx.
sudo apt build-dep nginx -y
Y después de completar toda la instalación, clone el código fuente 'ngx_brotli' de GitHub.
git clone --recursive https://github.com/google/ngx_brotli.git
Se han descargado Nginx y ngx_brotli.
Compila Nginx con soporte ngx_brotli
Ahora necesitamos editar la regla de compilación predeterminada de Nginx, debemos agregar ngx_brotli a la regla de compilación de los paquetes.
Vaya al directorio '/usr/local/src/nginx-*' y edite la configuración de 'reglas' de debian.
cd /usr/local/src/nginx-*/
vim debian/rules
Ahora obtendrá dos entornos de compilación para 'config.env.nginx ' y 'config.env.nginx_debug '. Agregue la opción '--add-module=' para ngx_brotli a ambos entornos integrados.
--add-module=/usr/local/src/ngx_brotli
Guardar y salir.
Y estamos listos para compilar y crear el paquete nginx con compatibilidad con ngx_brotli.
Ejecute el siguiente comando dpkg.
sudo dpkg-buildpackage -b -uc -us
- -b:Compilación solo binaria, sin archivos fuente.
- -uc :archivo .buildinfo y .changes sin firmar.
- -us:paquete fuente sin firmar.
Cuando se complete la compilación, obtendrá los paquetes nginx-*.deb en el directorio '/usr/local/src' como se muestra a continuación.
ls -lah
Instalar Nginx y habilitar el soporte de Brotli
Se completó la compilación de nginx con ngx_brotli, instale los paquetes nginx-*.deb usando el comando dpkg a continuación.
cd /usr/local/src/
sudo dpkg -i *.deb
Se ha instalado Nginx con soporte ngx_brotli.
Ahora vaya al directorio de configuración '/etc/nginx' y edite el archivo de configuración 'nginx.conf'.
cd /etc/nginx/
vim nginx.conf
Habilite ngx_brotli en nginx agregando la configuración a continuación 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;
Guardar y salir.
Pruebe la configuración de nginx y asegúrese de que no haya ningún error.
nginx -t
Se ha habilitado el soporte de compresión brotli.
Paso 3:configurar el host virtual de Nginx
En este paso, intentaremos crear un nuevo host virtual para el nombre de dominio nginx.hakase-labs.io.
- La compresión de Brotli solo es compatible con el sitio HTTPS, así que asegúrese de tener los archivos de certificado para su nombre de dominio, o puede generar certificados Letsencrypt SSL gratuitos.
Vaya al directorio de configuración '/etc/nginx' y cree una nueva configuración de host virtual 'brotli.conf'.
cd /etc/nginx/
vim conf.d/brotli.conf
Pegue la siguiente configuración de host virtual nginx allí.
# 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; } }
Guardar y salir.
- Cambie el nombre de dominio con su propio dominio.
- Cambie la ruta de los certificados SSL.
Ahora pruebe la configuración de nginx y asegúrese de que no haya ningún error, luego reinicie el servicio.
nginx -t
systemctl restart nginx
Se ha agregado el nuevo host virtual nginx.
Paso 4 - Prueba
Abra su navegador web y escriba el nombre de dominio, el mío es:
http://nginx.hakase-labs.io
Ahora será redirigido a la conexión https. Haga clic derecho en la página y haga clic en 'Inspeccionar elemento '. Haga clic en 'Red ' y vuelve a cargar la página.
Haga clic en los detalles de las solicitudes y obtendrá todos los encabezados de solicitudes y respuestas del servidor web, como se muestra a continuación.
En la sección 'Encabezados de respuesta', verá la 'codificación de contenido:br' para soporte de brotli.
Ahora, si desea realizar otra prueba, puede usar el comando curl como se muestra a continuación.
curl -H 'Accept-Encoding: br' -I https://nginx.hakase-labs.io
Y verá el resultado 'codificación de contenido:br' para compatibilidad con brotli.
La instalación de Nginx con Brotli Compression Support en Ubuntu 18.04 se completó con éxito.
Referencias
- https://github.com/google/ngx_brotli
- https://www.babak.io/blog/