GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo agregar soporte de compresión Brotli a Nginx en Debian 10

Brotli es un algoritmo de compresión sin pérdidas de propósito genérico desarrollado por Google como una alternativa a Gzip, Zopfli y Deflate que comprime datos usando una combinación de una variante moderna del algoritmo LZ77, codificación Huffman y modelado de contexto de 2 órdenes, con una relación de compresión comparable a los mejores métodos de compresión de uso general actualmente disponibles. Es similar en velocidad con deflate pero ofrece una compresión más densa.

Brotli es de código abierto bajo la licencia MIT.

Nginx no tiene soporte oficial, pero existe un módulo de terceros desarrollado por Google llamado ngx_brotli que puedes utilizar para agregar soporte a Nginx.

Esta guía le mostrará cómo agregar compatibilidad con Brotli al servidor web Nginx en el sistema Debian 10.

NOTA: Esta guía usará "johndoe" como usuario de ejemplo y "example.com " como un dominio de ejemplo. Reemplácelos de acuerdo con sus nombres.

Requisitos

  • Servidor Debian 10 (buster)
  • Nginx versión 1.11.5 o superior
  • Nombre de dominio con A /AAAA registros configurados
  • Certificado TLS

Pasos iniciales

Comprueba tu versión de Debian:

lsb_release -ds
# Debian GNU/Linux 10 (buster)

Configurar la zona horaria:

sudo dpkg-reconfigure tzdata

Actualice los paquetes de su sistema operativo (software). Ese es un primer paso esencial porque garantiza que tenga las últimas actualizaciones y correcciones de seguridad para los paquetes de software predeterminados de su sistema operativo:

sudo apt update && sudo apt upgrade -y

Instale algunos paquetes esenciales que son necesarios para la administración básica del sistema operativo Debian:

sudo apt install -y curl wget vim git unzip socat bash-completion apt-transport-https

Paso 1:instale Acme.sh y obtenga un certificado TLS de Let's Encrypt

Brotli requiere que configure y use HTTPS. En esta parte, obtendremos un certificado de confianza de Let's Encrypt.

Descargue e instale Acme.sh:

sudo mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail [email protected]
cd ~
source ~/.bashrc

Compruebe la versión:

acme.sh --version
# v2.8.2

Obtenga certificados RSA y ECDSA para example.com:

# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength 2048
# ECDSA/ECC P-256
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength ec-256

Después de ejecutar los comandos anteriores, sus certificados y claves estarán en las siguientes ubicaciones:

  • RSA:/etc/letsencrypt/example.com
  • ECC/ECDSA:/etc/letsencrypt/example.com_ecc

Paso 2:instale Nginx desde el repositorio oficial de Nginx

Descargue e instale la última línea principal de Nginx desde el repositorio oficial de Nginx:

wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s printf "deb https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt update
sudo apt install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt

Compruebe la versión de Nginx:

sudo nginx -v
# nginx version: nginx/1.17.4

Habilite e inicie el servicio Nginx:

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Paso 3:descargue y compile el código fuente de Brotli

Después de instalar Nginx, necesitamos compilar el módulo Brotli (ngx_brotli ) como un módulo Nginx dinámico. A partir de la versión 1.11.5 de Nginx, es posible compilar módulos dinámicos individuales sin compilar el software Nginx completo. En los próximos pasos, construiremos el módulo Brotli como dinámico sin compilar el Nginx completo.

Descargue la última versión del código fuente principal de Nginx y extráigalo:

wget https://nginx.org/download/nginx-1.17.4.tar.gz && tar zxvf nginx-1.17.4.tar.gz

NOTA: Es muy importante que los números de versión del paquete Nginx y el código fuente de Nginx coincidan. Si instaló Nginx 1.17.4 desde el repositorio oficial de Nginx, entonces debe descargar la misma versión del código fuente , 1.17.4 en este caso.

Eliminar nginx-1.17.4.tar.gz:

rm nginx-1.17.4.tar.gz

Clonar ngx_brotli de GitHub:

git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ~

Navegue hasta el directorio del código fuente de Nginx:

cd ~/nginx-1.17.4

Descargue las bibliotecas requeridas:

sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev

Compile el ngx_brotli como módulo dinámico y cópielo en el directorio estándar para módulos Nginx, /etc/nginx/modules:

./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp objs/*.so /etc/nginx/modules

Listar archivos en /etc/nginx/modules y verás ngx_http_brotli_filter_module.so y ngx_http_brotli_static_module.so:

ls /etc/nginx/modules

Establecer permisos en 644 para todos .so archivos:

sudo chmod 644 /etc/nginx/modules/*.so

Paso 4:configurar Nginx

Estamos listos para configurar el soporte de Brotli en Nginx.

Ejecute sudo vim /etc/nginx/nginx.conf y agregue las siguientes dos directivas en la parte superior del archivo para cargar nuevos módulos de Brotli:

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

Pruebe la configuración:

sudo nginx -t

Cree un directorio raíz de documentos para example.com y crea index.html con algo de contenido:

sudo mkdir -p /var/www/example.com
sudo -s
echo "Hello from example.com" >> /var/www/example.com/index.html
exit

Cree un host virtual para example.com:

sudo vim /etc/nginx/conf.d/example.com.conf

Rellénelo con la siguiente configuración:

server {
  listen 80;
  server_name example.com; # Replace with your domain name
  return 301 https://$server_name$request_uri;
}

server {    
  listen 443 ssl http2;
  server_name example.com; # Replace with your domain name

  root /var/www/example.com; # Replace with your document root

  # RSA
  ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
  # ECDSA
  ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;

  brotli on;
  brotli_static on;
  brotli_types text/plain text/css text/javascript application/javascript text/xml application/xml image/svg+xml application/json;
}

Pruebe la configuración:

sudo nginx -t

Recargar Nginx:

sudo systemctl reload nginx.service

Visite su sitio en su navegador web y abra la pestaña de red de las herramientas para desarrolladores. Verá Content-Encoding: br en los encabezados de respuesta. Ese es el indicador de que la compresión Brotli está funcionando.

Eso es todo. Ha habilitado la compresión Brotli en su sistema Debian 10.

Enlaces

  • https://brotli.org/
  • https://github.com/google/brotli
  • https://github.com/google/ngx_brotli
  • https://en.wikipedia.org/wiki/Brotli

Debian
  1. Cómo compilar la herramienta de compresión Brotli desde el origen en Debian 9

  2. Cómo instalar Nginx en Debian 8 (Jessie)

  3. Cómo instalar Nginx en Debian 9 (Stretch)

  4. Cómo configurar Nginx con soporte HTTP/2 en Debian 9

  5. Cómo instalar LEMP Stack en Debian 10 Buster

Cómo instalar Nginx con PHP-FPM en Debian 10

Cómo instalar la última línea principal o estable de Nginx en Debian 11

Cómo instalar Nginx Google Pagespeed en Debian 11 Bullseye

Cómo instalar la pila LEMP en Debian 11

Cómo instalar Go en Debian 11

Cómo agregar espacio de intercambio en Debian 11