NGINX, La Alternativa de un servidor web

NGINX es un servidor HTTP libre, de código abierto, con un proxy inverso, así como un servidor proxy IMAP / POP3. NGINX es mejor conocido por su alto rendimiento, estabilidad, conjunto de características ricas, configuración sencilla y bajo consumo de recursos.

A diferencia de los servidores tradicionales, NGINX no está basado en los hilos para manejar las solicitudes. En su caso  utiliza una arquitectura (asincrónica) basada en eventos mucho más escalable, esta arquitectura utiliza cantidades pequeñas predecibles de memoria bajo la carga. Incluso si no espera manejar miles de solicitudes simultáneas, todavía puede beneficiarse del alto rendimiento y  el bajo uso de memoria. NGINX escala en todas las direcciones: desde el más pequeño VPS todo el camino hasta grandes grupos de servidores.

Desde cuando podemos usar Nginx

La primera versión de Nginx apareció en Octubre de 2004 y actualmente este servidor web ya se encuentra en una versión más que estable, y esto ha hecho que muchos grandes sitios de Internet como por ejemplo WordPress.com o SourceForge, hayan decidido abandonar Apache como servidor web y pasarse a Nginx como servidor web principal.

Nginx vs Apache server

La principal diferencia entre Apache y Nginx (y la más grande) es su arquitectura, mientras que Apache abre un montón de procesos para servir peticiones, Nginx abre solo los hilos de ejecución justos y necesarios permitiendo servir millones de peticiones en un corto espacio de tiempo, ya que no requiere tiempo adicional para abrir nuevos procesos y además al no abrir nuevos procesos tampoco consume mas memoria RAM.

La diferencia de rendimiento entre Nginx y Apache se nota, ya que el tiempo de respuesta conseguido por Nginx es casi un 150% más rápido que en el caso de Apache.

Nginx vs Apache

Fig. 1 Nginx vs  Apache sirviendo páginas por segundo.

NGINX Más allá del servicio web

A pesar de NGINX se utiliza como el servidor web más rápido, la arquitectura escalable ha demostrado ser ideal para muchas tareas web más allá de servir contenido estático. Debido a que puede manejar un alto volumen de conexiones, NGINX se utiliza comúnmente como un proxy inverso y un equilibrador de carga para administrar el tráfico entrante y distribuirlo a servidores ascendentes más lentos – desde servidores de bases de datos heredados hasta microservicios.

NGINX también se coloca frecuentemente entre clientes y un segundo servidor web, para servir como un terminador SSL / TLS o un acelerador web. Actuando como un intermediario, NGINX maneja eficientemente las tareas que podrían ralentizar su servidor web, como la negociación de SSL / TLS o comprimir y almacenar en caché el contenido para mejorar el rendimiento. Los sitios dinámicos, construidos utilizando cualquier cosa, desde Node.js a PHP, suelen utilizar NGINX como caché de contenido y proxy inverso para reducir la carga en los servidores de aplicaciones y hacer el uso más efectivo del hardware subyacente.

 

Nginx reducción de conexiones

Fig. 2 Concurrencia y reducción de peticiones al servidor.

 

Nginx con proxy inverso

Cuando no podemos prescindir de Apache como servidor web por razones de configuración o necesidades del script PHP pero queremos disfrutar de las ventajas de Nginx al servir contenido estático podemos optar por usar Nginx como proxy inverso para otro servidor web como Apache.

El funcionamiento de Nginx como proxy inverso para Apache es simple: Nginx sirve los contenidos estáticos (imágenes, css, javascript, etc…) mientras que Apache se encarga de servir el contenido dinámico siendo además el encargado de procesar los scripts PHP.

Nginx como proxy inverso

fig. 1 Soporte para distintos Apps, el esquema de funcionamiento de Nginx como proxy inverso

Cómo instalar Nginx en Ubuntu

Antes de comenzar esta guía recuerde que los comandos de descarga pueden cambiar dependiendo del SO, y debe tener un usuario normal, no root, con privilegios configurados en su servidor.

Nginx está disponible en los repositorios predeterminados de Ubuntu, por lo que la instalación es bastante sencilla.

  • sudo apt-get update
  • sudo apt-get install nginx

Antes de poder probar Nginx, necesitamos configurar nuestro software de firewall para permitir el acceso al servicio. Nginx se registra a sí mismo como un servicio con ufw, nuestro cortafuegos, durante la instalación. Esto hace bastante fácil permitir el acceso de Nginx.

Para  listar las configuraciones de las aplicaciones que ufw saben cómo trabajar escribiendo:

  • sudo ufw app list

Con esto la respuesta de la lista de los perfiles  de aplicación.

Available applications:

  • Nginx Full
  • Nginx HTTP
  • Nginx HTTPS
  • OpenSSH

Como puede ver, hay tres perfiles disponibles para Nginx:

  • Nginx Full : Este perfil abre tanto el puerto 80 (normal, tráfico web no cifrado) como el puerto 443 (tráfico cifrado TLS / SSL)
  • Nginx HTTP : Este perfil abre sólo el puerto 80 (normal, tráfico web no cifrado)
  • HTTPS de Nginx : este perfil abre sólo el puerto 443 (tráfico cifrado TLS / SSL).

Podemos consultar con el systemd sistema init para asegurarnos de que el servicio se está ejecutando escribiendo:

systemctl status nginx

Debería ver la página de destino predeterminada de Nginx, que debería tener el siguiente aspecto:

Welcomo to nginx

Fig. 4 Pagina de defauld de Nginx.

Cómo usar la imagen oficial de Docker NGINX.

Como vimos en la entrega anterior de este número sobre Docker Hoy veremos como estas dos tecnologías pueden aumentar la rentabilidad.

Para crear una instancia de NGINX en un contenedor Docker, busque y extraiga la imagen oficial de NGINX desde Docker Hub. Utilice el siguiente comando para iniciar una instancia de NGINX ejecutándose en un contenedor y utilizando la configuración predeterminada.

docker run –name mynginx1 -P -d nginx
Fcd1fb01b14557c7c9d991238f2558ae2704d129cf9fb97bb4fadf673a58580d

Este comando crea un contenedor denominado mynginx1 basado en la imagen NGINX y lo ejecuta en modo independiente, lo que significa que el contenedor se inicia y permanece en ejecución hasta que se detiene, pero no escucha la línea de comandos.

La imagen NGINX expone los puertos 80 y 443 en el contenedor y la -P opción le dice a Docker que  se mapee esos puertos a los  puertos en el host  dentro del Docker que se seleccionan aleatoriamente entre el rango 49153 y 65535.

Esto se hace  porque si creamos múltiples contenedores NGINX en el En el mismo host de Docker, creamos un conflicto en los puertos 80 y 443. Las asignaciones de puertos son dinámicas y se establecen cada vez que se inicia o reinicia el contenedor. Si desea que las asignaciones de puertos sean estáticas, establezca manualmente con la -p opción. Se devolverá la forma larga del Id de contenedor.

Podemos ejecutar docker ps para verificar que el contenedor fue creado y se está ejecutando, y para ver las asignaciones de puerto:

Docker ps

También podemos verificar que NGINX se está ejecutando haciendo una petición HTTP al puerto 49167 (informado en la salida del comando anterior el puerto del  host Docker que está asignado al puerto 80 en el contenedor); aparece la página de bienvenida predeterminada de NGINX.

Bibliografia

Tomas del Angel Mujica
Tomas del Angel Mujica

Deja un comentario


*