Compilando NGINX con modulos adicionales

Muchas veces por comodidad y/o velocidad instalamos NGINX en nuestro sistema usando un simple apt install . Luego queremos implementar o activar características en nuestro servidor web y nos damos cuenta que no podemos, porque sencillamente el NGINX que instalamos no las soporta. Les mostrare los pasos para compilar NGINX agregándole módulos adicionales, con lo cual podrán explotar mejor las bondades de este ligero y potente servidor web/proxy.

Después de una búsqueda por internet, me decidí por los siguientes módulos que a mi entender son los más usados. Si necesitan de otro que no está en la lista pueden agregárselos también.

NGINX PageSpeed: Módulo open-source que optimiza tu sitio automáticamente.

Google brotli: Brotli es una librería de compresión de datos de Google.

NGINX Cache Purge: Módulo que agrega la capacidad de purgar contenido de cachés FastCGI, proxy, SCGI y uWSGI.

NGINX Slowfs Cache: Módulo que agrega la capacidad de almacenar en caché archivos estáticos.

NGINX coolkit: Como indica su nombre es una colección de pequeños y útiles complementos de NGINX.

Headers more NGINX Module : Módulo que configura, agrega y borra encabezados de salida arbitrarios en servidores http de NGINX.

NGINX http passenger module: Ejecuta y administra sus aplicaciones Ruby, Node.js y Python en su servidor web con facilidad.

Además de estos módulos le daremos a nuestro NGINX la capacidad de soportar TLSv1.3 el nuevo estándar de OpenSSL. Todo el proceso de compilación lo hare sobre un contenedor de proxmox usando como sistema debian 9. Por lo que puede haber dependencias y paquetes que usare que para algunos no sea necesario. Tratare de minimizar lo más posible los errores de dependencia y compilación. Todo lo adicional que se instale aquí es necesario y obligatorio si usan una plantilla de Debian 9 en proxmox.

Comenzaremos creando un CT(contenedor) en proxmox usando como OS Debian 9. Las propiedades del mismo las dejo a su gusto ya que no puedo adivinar para que lo van a usar. Lo iniciamos y configuramos para el uso, ssh sourcelist etc.

En este punto recomiendo hacer una salva del contenedor.

Instalaremos estas herramientas necesarias para compilar

Dependencias necesarias para los módulos y trabajo

Ahora procedemos a instalar Passenger:

Agregamos esta entrada en nuestro sourcelist:

Importamos la llave del repositorio

Seguido actualizamos nuestra paquetería e instalamos el passenger

Para evitar el error a la hora de compilar con el módulo de pagespeed debemos instalar lo siguiente (esto me costó trabajo encontrarlo, pero les regalo el TIP)

Crearemos el usuario y el grupo que usara nuestro NGINX.

En este punto recomiendo hacer una salva del contenedor.

Ahora procederemos a bajar todas las fuentes de los módulos y de NGINX a nuestro contendor. Personalmente como no me gusta el reguero y siempre renombro los ficheros y carpetas para un mejor entendimiento, descargare todo para la carpeta root. La carpeta root no será el destino final de las fuentes para compilar, posteriormente los moveré ya renombrados y organizados para la ubicación final. Si ustedes consideran este paso innecesario y quieren descargarlo y descompactarlos directamente donde se usarán, siéntanse libre de hacerlo.

Revisamos todas las últimas versiones tanto de los módulos como de NGINX. Los links los doy al inicio cuando describo los módulos.

Creamos una carpeta en root donde descargaremos todo.

Empezamos descargando la última versión estable (hasta la fecha de creación del tutorial) de NGINX.

Creamos una carpeta dentro de nginx para depositar ahí los módulos que usaremos

MODULOS (las versiones de los módulos son las más recientes a la fecha de creación del tutorial)

1- Cache Purge

2- Coolkit

3- SlowFS

4- Headers More

5- PageSpeed

NOTA: Debido al bloqueo que tiene algunas páginas de Google el siguiente link no puede ser alcanzado desde cuba, por lo que tendrán que bajarlo usando otra alternativa. El fichero resultante 1.13.35.2-x64.tar.gz deberán descomprimirlo (carpeta psol) dentro de la carpeta de los fuentes de ngx_pagespeed. El resultado se muestra en la siguiente captura.

6- Brotli

7- OpenSSL con soporte TSL v1.3

Ahora procedemos a copiar todos los módulos a su ubicación final (/usr/share/nginx/modules/) ordenados y renombrados.

En este punto recomiendo hacer una salva del contenedor.

Finalmente vamos compilar nuestro NGINX ahora que ya tenemos todos los módulos listos.

Si todo salió bien podemos probar nuestro NGINX. Antes crearemos 2 carpetas que NGINX usara.

Probamos

Ahora crearemos el servicio de NGINX.

Arrancamos y activamos nuestro NGINX

Al comprobar nuestro servicio vemos este error

Aquí es cuando nuestro amigo @Koratsuki empieza a hablar mal de systemd 🙂

Les daré 2 posibles soluciones.

a)

b)

Nota: A mi me funciono solo la opcion b

Reiniciamos todo y probamos de nuevo:

Finalmente hagamos una prueba sencilla con uno de los modulos, especificamente con el de nginx_status. El cual lo activamos al compilarlo –with-http_stub_status_module

allow 10.122.193.0/24; rango de IP de LAN de su red

Recargamos el NGINX o lo reiniciamos. En nuestro navegador accedemos a http://ipdelnginx/nginx_status y obtendremos algo como esto

active connections — Número de conexiones abiertas.
server accepts handled requests — En el ejemplo, nginx ha aceptado 1 conexiones, procesado 1 de ellas (Ninguna fue cerrada) y ha procesado 1.
reading — Peticiones de cabecera leídas.
writing — Peticiones leídas, procesadas, o escritas en respuesta al cliente.
waiting — Conexiones keep-alive, activas en el momento (Lectura + Escritura)

En este tutorial solo les muestro los pasos para compilar e instalar el NGIX con módulos extra, no les muestro las configuraciones para usarlo. En futuros tutoriales o continuación de este le mostrare a medida que lo vaya probando como usar los diferentes módulos.

Espero les ayude este tutorial y a partir de ahora tengan un servidor web mucho más potente que antes

alex out

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4 / 5. Recuento de votos: 1

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Alexander Rivas Alpizar 61 artículos
Administrador de Redes EMPRESTUR Cienfuegos

5 comentarios

  1. Firefox 63.0 Firefox 63.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0

    Bien Ale… Un Ngix con esteroides. Un abrazo.

  2. Google Chrome 70.0.3538.110 Google Chrome 70.0.3538.110 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36

    un tip viejo te falto apt install libcurl3 es una dependencia que pide el passenger en ubuntu 18.04 para poder instalarse jejejej otro tip para que agreges al tutu

  3. Firefox 63.0 Firefox 63.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0

    Eso te pasa por usar Mierduntu, pero es válida la aclaración. En debian no se precisa. Al que use Ubuntu ya se dará cuenta de las dependencias necesarias. Que por lo que noto es solo 1. Y tutu es lo que usan las bailarinas 🙂

  4. Google Chrome 84.0.4147.105 Google Chrome 84.0.4147.105 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36

    Se pude reemplazar el apache de windows por nginx, tengo entendido que hay funciones especificas que optimizan el funciomiento de nginx no estan en windows, se puede hacer o sigo con apache

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.