Skip to content

Repository files navigation

Licencia

La presentación está bajo licencia CC BY 4.0 y el resto del proyecto sobre MIT. Para visualizarla:

npm install

y

npm run dev

Balanceo de Carga con Nginx y Docker

Descripción del Proyecto

Este proyecto demuestra cómo implementar un balanceador de carga usando Nginx y Docker. El sistema distribuye las peticiones HTTP entre tres servidores backend utilizando el algoritmo round-robin.

Arquitectura

Cliente (Navegador)
        ↓
   Load Balancer (Nginx)
        ↓
   ┌────┴────┬────────┐
   ↓         ↓        ↓
Backend 1  Backend 2  Backend 3

Estructura del Proyecto

nginx-load-balancer/
├── docker-compose.yml
├── nginx.conf
├── check_balancer.sh
├── pages_backends.sh
├── backend1/
│   └── index.html
├── backend2/
│   └── index.html
└── backend3/
    └── index.html

Video Demostrativo

Ver proyecto en funcionamiento

Prerequisitos

  • Docker instalado
  • Docker Compose instalado

Cómo Ejecutar

  1. Clonar el repositorio

  2. Iniciar los contenedores:

docker-compose up -d
  1. Verificar que los contenedores estén corriendo:
docker-compose ps
  1. Acceder:

  2. Ver logs del balanceador:

docker logs -f load_balancer

Pruebas

El repositorio incluye un script de pruebas automáticas. Para ejecutarlo:

./check_balancer.sh

Este script verifica el funcionamiento del balanceador de carga.

Configuración de Nginx

Algoritmos de balanceo disponibles:

1. Round Robin (por defecto) - Distribuye las peticiones de forma secuencial

upstream backend_servers {
    server backend1:80;
    server backend2:80;
    server backend3:80;
}

2. Least Connections - Envía al servidor con menos conexiones activas

upstream backend_servers {
    least_conn;
    server backend1:80;
    server backend2:80;
    server backend3:80;
}

3. IP Hash - Asigna al cliente siempre al mismo servidor

upstream backend_servers {
    ip_hash;
    server backend1:80;
    server backend2:80;
    server backend3:80;
}

4. Weighted (Ponderado) - Asigna más carga a servidores específicos

upstream backend_servers {
    server backend1:80 weight=3;
    server backend2:80 weight=2;
    server backend3:80 weight=1;
}

Monitoreo

Ver estadísticas de contenedores:

docker stats

Acceder a logs de un backend específico:

docker logs backend_server_1
docker logs backend_server_2
docker logs backend_server_3

Ver configuración activa de Nginx:

docker exec load_balancer nginx -T

Detener el Proyecto

# Detener contenedores
docker-compose down

# Detener y eliminar volúmenes
docker-compose down -v

Extensiones Posibles

  • Agregar HTTPS con certificados SSL
  • Implementar health checks automáticos
  • Agregar caché de contenido estático
  • Implementar rate limiting
  • Agregar autenticación
  • Integrar con métricas (Prometheus, Grafana)

Notas Técnicas

  • Los backends usan Nginx Alpine por ser ligero (aproximadamente 23MB)
  • La red app-network mantiene aislados los contenedores
  • Los archivos HTML se montan como volúmenes read-only para seguridad
  • El balanceador expone solo el puerto 80 al exterior

Referencias

About

Sistema que distribuye el tráfico entre varios servidores

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages