Cómo habilitar la compresión Brotli en Nginx en CentOS 8
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 segundo orden, 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 hay un módulo de terceros desarrollado por Google llamado ngx_brotli que puede utilizar para agregar soporte a Nginx.
Este tutorial le mostrará cómo agregar compatibilidad con Brotli al servidor web Nginx en el servidor CentOS 8.
NOTA: Esta guía utilizará «johndoe» como ejemplo de usuario y «ejemplo.com» como ejemplo de dominio. Reemplácelos de acuerdo con sus nombres.
Requisitos
- Servidor CentOS 8
- Nginx versión 1.11.5 o superior
- Nombre de dominio con registros A/AAAA configurados
- certificado TLS
Pasos iniciales
Compruebe su versión de CentOS:
cat /etc/centos-release
# CentOS Linux release 8.0.1905 (Core)
Configurar la zona horaria:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'
Actualice los paquetes de su sistema operativo (software). Este es un primer paso importante porque garantiza que tenga las últimas actualizaciones y correcciones de seguridad para los paquetes de software predeterminados de su sistema operativo:
sudo dnf update -y
Instale algunos paquetes esenciales que son necesarios para la administración básica del sistema operativo CentOS:
sudo dnf install -y curl wget vim git unzip socat bash-completion epel-release socat && sudo dnf groupinstall "Development Tools"
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
Mira esta versión:
acme.sh --version
# v2.8.6
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
Deberá descargar e instalar la última versión principal de Nginx desde el repositorio oficial de Nginx:
Instale los requisitos previos:
sudo yum install yum-utils
Para configurar el repositorio de yum, cree el archivo llamado /etc/yum.repos.d/nginx.repo con el siguiente contenido:
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
De forma predeterminada, se utiliza el repositorio de paquetes nginx estables. Necesitamos usar paquetes nginx de línea principal. Ejecute el siguiente comando para usar la fuente principal:
sudo yum-config-manager --enable nginx-mainline
Para instalar nginx, ejecute el siguiente comando:
sudo yum install -y nginx
Compruebe la versión de Nginx:
sudo nginx -v
# nginx version: nginx/1.17.8
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.8.tar.gz && tar zxvf nginx-1.17.8.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.8 desde el repositorio oficial de Nginx, entonces debe descargar la misma versión del código fuente1.17.8 en este caso.
Quitar nginx-1.17.8.tar.gz:Publicidad
rm nginx-1.17.8.tar.gz
Clona ngx_brotli de GitHub:
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ~
Navegue al directorio del código fuente de Nginx:
cd ~/nginx-1.17.8
Descargue las bibliotecas requeridas:
sudo dnf install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
Compile ngx_brotli como un 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
Enumere los archivos en /etc/nginx/modules y verá ngx_http_brotli_filter_module.so y ngx_http_brotli_static_module.so:
ls /etc/nginx/modules
Establezca los permisos en 644 para todos los archivos .so:
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 cree 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 CentOS 8.