Saltar al contenido

Nginx vs Traefik: cuándo elegir cada uno como reverse proxy

7 min de lectura Infraestructura
  • nginx
  • traefik
  • reverse proxy
  • docker
  • infraestructura
  • servidores

Elegir el reverse proxy adecuado para tu infraestructura es una decisión crítica que afecta a la configuración, el mantenimiento y la escalabilidad de tus aplicaciones. La mayoría de los proyectos modernos con Docker se debaten entre Nginx y Traefik. Ambos son soluciones robustas, pero cada uno brilla en escenarios distintos.

No hay una respuesta única sobre cuál es mejor. La elección depende directamente de la complejidad de tu stack, la frecuencia de tus despliegues y tu familiaridad con la configuración manual.

Nginx: configuración manual y robustez

Nginx es un veterano en el mundo de los servidores web y los reverse proxies. Es conocido por su rendimiento, estabilidad y la flexibilidad que ofrece su configuración basada en archivos. Lo he usado durante años en proyectos donde la infraestructura era estática o los cambios de configuración eran poco frecuentes.

La configuración de Nginx se basa en archivos .conf que defines manualmente. Esto te da un control granular sobre cada aspecto de tu servidor, desde la gestión de SSL hasta las redirecciones y el balanceo de carga. Es una solución probada y fiable para entornos de producción.

Funciona bien si:

  • Tu infraestructura es relativamente estática y no cambia a menudo.
  • Necesitas un control muy fino sobre cada directiva de configuración.
  • Ya tienes experiencia con su sintaxis de configuración.
  • Quieres el máximo rendimiento y estabilidad para un conjunto fijo de servicios.

Deja de funcionar cuando:

  • Despliegas y redimensionas servicios Docker constantemente.
  • Buscas una configuración que se adapte automáticamente a los contenedores.
  • No quieres mantener archivos de configuración manualmente para cada nuevo servicio.

Para montar Nginx con Docker, defines tus servicios y luego configuras Nginx para que apunte a ellos usando sus IPs internas o nombres de servicio.

server {
    listen 80;
    server_name midominio.com;

    location / {
        proxy_pass http://nombre_servicio_docker:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Traefik: proxy dinámico para entornos Docker

Traefik es un reverse proxy moderno que se integra directamente con orquestadores de contenedores como Docker, Kubernetes o Swarm. Su principal ventaja es la auto-descubrimiento: lee los metadatos de tus contenedores (las “labels” de Docker) y configura las rutas automáticamente. Esto lo convierte en una opción excelente para entornos dinámicos donde los servicios arrancan y paran con frecuencia.

No necesitas tocar un archivo de configuración cada vez que despliegas un nuevo servicio o actualizas uno existente. Traefik detecta los cambios y ajusta su configuración en tiempo real. Esto acelera mucho los ciclos de despliegue. Por eso uso Docker y Traefik en mis proyectos para gestionar múltiples servicios.

Funciona bien si:

  • Usas Docker Compose o Kubernetes y necesitas un proxy que se adapte automáticamente.
  • Despliegas múltiples servicios en un mismo servidor, como varias webs en un VPS con Docker.
  • Quieres gestionar certificados SSL con Let’s Encrypt de forma automática.
  • Priorizas la velocidad de despliegue y la reducción de la configuración manual.

Deja de funcionar cuando:

  • Necesitas configuraciones muy complejas o personalizadas que no se pueden expresar con labels.
  • Tu stack no está completamente basado en contenedores.
  • Prefieres la transparencia total de un archivo de configuración explícito.

Un ejemplo de configuración de Traefik con Docker Compose:

version: '3.8'

services:
  whoami:
    image: traefik/whoami
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.midominio.com`)"
      - "traefik.http.routers.whoami.entrypoints=websecure"
      - "traefik.http.routers.whoami.tls.certresolver=le" # Let's Encrypt

  traefik:
    image: traefik:v2.10
    command:
      - --api.insecure=true
      - --providers.docker
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - [email protected]
      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
      - --certificatesresolvers.le.acme.tlschallenge=true
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080" # Traefik Dashboard
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt

Comparativa: Nginx vs Traefik

CaracterísticaNginxTraefik
ConfiguraciónEstática, archivos .confDinámica, labels de Docker
Auto-descubrimientoNo, requiere configuración manualSí, detecta servicios automáticamente
SSL (Let’s Encrypt)Requiere configuración externa/manualIntegrado, automático (Cert-Manager)
Uso principalServidor web, proxy para apps fijasReverse proxy para microservicios Docker
Curva de aprendizajeModerada (sintaxis propia)Baja si usas Docker Compose
RendimientoMuy alto, optimizadoAlto, con ligera sobrecarga por dinámica
DashboardNo integradoSí, para monitorizar rutas y servicios

Ventajas y desventajas de Nginx y Traefik

Lo que ganas con Nginx:

  • Rendimiento puro y duro, ideal para servir contenido estático o balancear cargas pesadas.
  • Control absoluto sobre cada directiva de configuración.
  • Menor dependencia de la lógica del orquestador de contenedores para su funcionamiento.

Lo que complicas con Nginx:

  • Cada nuevo servicio o cambio requiere modificar y recargar la configuración de Nginx manualmente.
  • La gestión de certificados SSL (como Let’s Encrypt) necesita herramientas externas como Certbot.
  • Puede volverse complejo y propenso a errores en entornos con muchos servicios que cambian a menudo.

Lo que ganas con Traefik:

  • Automatización total de la configuración para servicios Docker.
  • Gestión de SSL (Let’s Encrypt) integrada y automática, simplificando la seguridad.
  • Despliegues más rápidos y menos propensos a errores de configuración manual.

Lo que complicas con Traefik:

  • Dependencia del orquestador de contenedores para su configuración.
  • Configurar reglas muy específicas o complejas puede ser más limitado o menos intuitivo con labels.
  • La depuración puede requerir entender cómo Traefik interpreta las labels de Docker.

Mi regla es clara: si usas Docker y despliegas servicios con frecuencia, Traefik es la opción que te ahorra más tiempo a medio y largo plazo. Si tienes una aplicación monolítica o un conjunto muy estable de servicios, Nginx sigue siendo una elección excelente por su robustez y rendimiento.

Cuando monto un entorno en producción, la gestión de certificados SSL es una preocupación constante. Si quieres ver cómo Traefik lo hace de forma automática, puedes consultar el artículo sobre SSL con Let’s Encrypt y Traefik. Además, si ya usas n8n en producción, tengo una guía específica para desplegar n8n con Docker y Traefik. Para los que buscan ir un paso más allá en la automatización de la infraestructura, entender cómo funcionan los deploys automáticos con webhooks y Docker es el siguiente escalón.

Lucas Juárez
Lucas Juárez

Técnico freelance especializado en desarrollo a medida, automatizaciones con IA y gestión técnica para negocios en España. Más sobre mí →

Compartir:

¿Necesitas que alguien se ocupe de tu web?

Me encargo de que tu web funcione, esté segura y actualizada. Backups, actualizaciones y soporte directo. Planes desde 49 €/mes.

Chat