Instalando NGINX con soporte de compresión Brotli

Cloud, Tecnología de sistemas

Trevenque Group » Blog » Soluciones Empresariales » Instalando NGINX con soporte de compresión Brotli

No puedo disimular mi emoción hoy al hablaros de uno de los paquetes de software que más despiertan mi admiración desde que lo conozco y utilizo, NGiNX. Atrás quedaron proyectos como Lighttpd o Cherokee Web Server, utilizados como sustitutos de Apache en proyectos donde primaba el mínimo consumo de recursos y el máximo rendimiento.

NGiNX, pronunciado ‘enllin-ex’, es un servidor web y proxy inverso ligero y multiplataforma de gran desempeño que también puede utilizarse como proxy de protocolos de correo electrónico (IMAP/POP3). Creado por el ruso Igor Sysoev en 2004, actualmente son infinidad de sitios conocidos quienes lo utilizan, Netflix o Github entre ellos.

Recientemente NGINX+, el producto comercial derivado de este proyecto Open Source con licencia BSD, ha sido adquirido por una de las marcas de más renombre en el mundo del networking y aplicaciones web, F5 Networks. Esta marca es mundialmente famosa por sus soluciones de balanceo de carga BIG-IP y también, por qué no decirlo, por el coste de sus ‘appliances’.

Dejando atrás un poco las marcas y productos, hoy voy a hablaros sobre cómo integrar el algoritmo de compresión Brotli, creado por Google, dentro de NGiNX de forma fácil y rápida. Pero antes, hablemos de Brotli.

Brotli es un algoritmo de compresión de datos que ofrece velocidades similares o incluso menores que *gzip* pero con una densidad de compresión mucho mayor. Y es especialmente reseñable esta diferencia cuando se trata de texto. Un documento javascript o css es entre un 15% y un 20% más pequeño utilizando Brotli que gzip. Más información acerca de las bondades de este algoritmo aquí, aquí y aquí. Y si tienes mucho tiempo libre e inquietudes variopintas como yo, puedes encontrar aquí las especificaciones del formato y su repositorio en Github.

Bueno, manos a la obra. Partimos de una máquina Debian 9 versión 64bits en la que instalaremos las dependencias necesarias para poder descargar y compilar el proyecto nginx-ee, un conjunto de scripts que nos automatizará la tarea de compilar el servidor web NGiNX con soporte Brotli y algún otro módulo que nos será de gran utilidad.

Instalaremos git para descargar el repositorio del proyecto:

gtk@nginx:~$ sudo apt install git
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias 
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes adicionales:
git-man liberror-perl patch rsync
Paquetes sugeridos:
git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn ed diffutils-doc
Se instalarán los siguientes paquetes NUEVOS:
git git-man liberror-perl patch rsync
0 actualizados, 5 nuevos se instalarán, 0 para eliminar y 0 no actualizados.
Se necesita descargar 6.131 kB de archivos.
Se utilizarán 32,0 MB de espacio de disco adicional después de esta operación.
¿Desea continuar? 

Descargamos desde el repositorio del proyecto:

gtk@nginx:~$ git clone https://github.com/VirtuBox/nginx-ee
Cloning into 'nginx-ee'...
remote: Enumerating objects: 62, done.
remote: Counting objects: 100% (62/62), done.
remote: Compressing objects: 100% (59/59), done.
remote: Total 1363 (delta 32), reused 26 (delta 2), pack-reused 1301
Receiving objects: 100% (1363/1363), 464.50 KiB | 0 bytes/s, done.
Resolving deltas: 100% (739/739), done.

Lanzamos la compilación en modo interactivo. Nos permitirá seleccionar qué modulos incluir dentro de NGiNX y qué versión usaremos del servidor web:

gtk@nginx:~/nginx-ee$ sudo ./nginx-build.sh --stable --pagespeed --rtmp --openssl-system

Welcome to the nginx-ee bash script v3.6.2

##################################
Compilation summary 
##################################

Detected OS : Debian GNU/Linux 9.9 (stretch)
Detected Arch : x86_64

- Nginx release : 1.16.0
- OPENSSL : from system
- Dynamic modules NO
- Pagespeed : stable
- Naxsi : NO
- RTMP : YES

Installing dependencies 
Setting Up Nginx configurations 
Installing FFMPEG for RMTP module 
Downloading additionals modules 
Downloading zlib 
Downloading pcre 
Downloading brotli 
Downloading pagespeed 
Downloading nginx 
Applying nginx patches 
Configuring nginx 
Compiling nginx 
Updating Nginx manual 
Performing final steps 
Checking nginx configuration 
Nginx-ee was compiled successfully !

Installation log : /tmp/nginx-ee.log

Comprobamos que NGiNX está corriendo:

gtk@nginx:~/nginx-ee$ sudo systemctl status nginx
● nginx.service - The NGINX HTTP and reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-06-03 01:30:17 CEST; 2min 24s ago
Process: 32493 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS)
Process: 32501 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 32500 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Main PID: 32505 (nginx)
Tasks: 35 (limit: 4915)
CGroup: /system.slice/nginx.service
├─32505 nginx: master process /usr/sbin/nginx
├─32506 nginx: worker process
└─32507 nginx: cache manager process

jun 03 01:30:17 nginx systemd: Starting The NGINX HTTP and reverse proxy server...
jun 03 01:30:17 nginx nginx: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
jun 03 01:30:17 nginx nginx: nginx: configuration file /etc/nginx/nginx.conf test is successful
jun 03 01:30:17 nginx systemd: nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument
jun 03 01:30:17 nginx systemd: Started The NGINX HTTP and reverse proxy server.

Y que está compilado con el soporte de Brotli, Pagespeed o RMTP, entre otros módulos:

gtk@nginx:~/nginx-ee$ sudo nginx -V 
nginx version: nginx/1.16.0 (VirtuBox Nginx-ee)
built by gcc 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) 
built with OpenSSL 1.1.0j 20 Nov 2018
TLS SNI support enabled
configure arguments: --with-cc-opt=' -Wno-error=date-time' --with-ld-opt= --prefix=/usr/share --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --modules-path=/usr/share/nginx/modules --build='VirtuBox Nginx-ee' --with-file-aio --with-threads --with-http_v2_hpack_enc --with-http_v2_module --with-http_ssl_module --with-pcre-jit --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_gzip_static_module --with-http_gunzip_module --with-http_mp4_module --with-http_sub_module --add-module=../ngx_http_substitutions_filter_module --add-module=../srcache-nginx-module --add-module=../ngx_http_redis --add-module=../redis2-nginx-module --add-module=../memc-nginx-module --add-module=../ngx_devel_kit --add-module=../set-misc-nginx-module --add-module=../ngx_http_auth_pam_module --add-module=../nginx-module-vts --add-module=../ipscrubtmp/ipscrub --add-module=../incubator-pagespeed-ngx-latest-stable --add-module=../nginx-rtmp-module --add-module=../echo-nginx-module --add-module=../headers-more-nginx-module --add-module=../ngx_cache_purge --add-module=../ngx_brotli --with-zlib=../zlib-cf --with-openssl-opt=enable-tls1_3 --sbin-path=/usr/sbin/nginx

Aquí podemos ver la captura de los headers de una petición servida con esta solución, los resaltados incluyen la codificación del contenido ‘br’ y el servidor ‘nginx’ que la sirve:

Captura de los headers de una petición servida con esta solución, los resaltados incluyen la codificación del contenido 'br' y el servidor 'nginx' que la sirve

¿Te ha gustado? ¡Compártelo!

Logo Trevenque

trevenque group

Ofrecemos un conjunto de servicios completos para que puedas desarrollar tu negocio, gestionar tus datos de manera inteligente y tomar decisiones rentables.

Deja un comentario

Artículos similares

Sigue de cerca la actualidad de Grupo Trevenque y las últimas tendencias tecnológicas y de Business Intelligence.

Ver todas las noticias