Nginx como proxy inverso y balanceador
Nginx ha demostrado ser una solución integral para muchos servicios utiles de servidores e infraestructura TIC. En esta ocasión nos centraremos en dos, proxy inverso y balanceador de carga:
Un balanceador de carga es un sistema que distribuye las solicitudes entrantes de manera equilibrada entre múltiples servidores de backend para mejorar el rendimiento, la disponibilidad y la tolerancia a fallos.
Pasos para Configurar el Proxy Inverso
Pre-requisitos:
Instalar y ejecutar un servidor backend simple.
Por ejemplo, si usas Python con Flask:
Si no tienes instalado pip o python puedes hacerlo con
sudo apt install python3-pip
Luego crea un archivo llamado
app.py
con la IP de tu servidor y el puerto deseado:Ejecuta el servidor:
Para más comodidad, puedes lanzar la aplicación como un proceso en segundo plano añadiendo & al final, veamos el proceso:
Ahora el servidor estará escuchando en
http://10.0.0.5:5000
, puedes comprobarlo a través de un equipo cliente.
Configura Nginx como Proxy Inverso:
Ahora toca configurar l proxy como si fuera un host normal, crea y edita el archivo de configuración del sitio web (por ejemplo,
/etc/nginx/sites-available/proxy
):Explicación:
proxy_pass
: Redirige las peticiones a la URL del backend.proxy_set_header
: Transfiere encabezados adicionales para que el backend tenga información del cliente original.
Habilita la configuración:
Crea un enlace simbólico para habilitar el sitio:
Recarga o reinicia Nginx:
Prueba la configuración:
Envía una petición al proxy inverso:
Deberías recibir la respuesta del backend:
"Respuesta del servidor backend"
.
Pasos para Configurar el Balanceo de Carga
Round Robin
En este caso crearemos un balanceador que seguirá un esquema de Round Robin por defecto, este es un algoritmo de balanceo de carga utilizado en entornos de redes y servidores para distribuir las solicitudes o tareas entre un conjunto de recursos. La idea básica detrás del algoritmo es bastante simple: asigna cada solicitud o tarea al siguiente recurso disponible en una lista circular.
En este enfoque, las solicitudes se distribuyen secuencialmente a través de la lista y cada servidor recibe una solicitud en secuencia, independientemente de su carga actual. Este método es simple pero no tiene en cuenta la carga actual de cada servidor.
Para ponerlo en práctica realizaremos algo muy simple:
Pre-requisitos:
Ejecutamos dos instancias del servidor backend en diferentes puertos tal y como hemos visto anteriormente cambiándoles el puerto:
Por ejemplo, utilizando Flask:
En el puerto
5000
:En el puerto
5001
:
Configura el Balanceador de Carga:
Abre o crea un archivo de configuración para el balanceador (por ejemplo,
/etc/nginx/sites-available/balanceador
):Explicación:
El bloque
upstream
define un grupo de servidores backend.Nginx distribuye las peticiones entre estos servidores utilizando el algoritmo round-robin por defecto.
Habilita la Configuración:
Crea un enlace simbólico:
Recarga Nginx:
Prueba el Balanceo de Carga:
Envía múltiples peticiones al servidor balanceador:
Observa que las respuestas alternan entre las instancias de backend.
Verifica los Logs:
Inspecciona los logs de acceso para validar que las peticiones se distribuyen entre los servidores:
Última actualización