Guía de Traefik con Docker 2026: El Proxy Inverso Definitivo
Configura Traefik con Docker para SSL automático, descubrimiento de servicios y balanceo de carga. Guía completa para despliegues modernos con contenedores.
Guía de Traefik con Docker: Proxy Inverso Automático
Traefik es el proxy inverso nativo de la nube. Descubre tus contenedores Docker y enruta automáticamente el tráfico hacia ellos — con certificados SSL gratuitos.
¿Qué es Traefik?
Traefik se sitúa delante de tus servicios:
Internet → Traefik → Contenedor A (app.dominio.com)
→ Contenedor B (api.dominio.com)
→ Contenedor C (admin.dominio.com)
Características principales:
- Auto-descubrimiento — Detecta nuevos contenedores
- Auto-SSL — Integración con Let’s Encrypt
- Balanceo de carga — Múltiples contenedores por servicio
- Middleware — Autenticación, limitación de velocidad, cabeceras
- Panel de control — Vista general visual de los servicios
¿Por qué Traefik en lugar de Nginx?
| Característica | Traefik | Nginx |
|---|---|---|
| Integración con Docker | Nativa | Configuración manual |
| Auto SSL | Incorporado | Requiere Certbot |
| Descubrimiento de servicios | Automático | Manual |
| Recarga de configuración | En caliente | Requiere reinicio |
| Curva de aprendizaje | Moderada | Menor |
| Rendimiento | Excelente | Excelente |
Traefik gana en entornos Docker. Nginx para configuraciones estáticas (consulta nuestra guía de proxy inverso con Nginx).
Requisitos del VPS
Traefik es ligero:
- 1 vCPU
- 512MB RAM (para Traefik en sí)
- Puertos 80, 443
Las especificaciones de tu VPS dependen de tus servicios, no de Traefik. Consulta nuestra guía del mejor VPS para Docker para recomendaciones de dimensionamiento.
Configuración Básica
Paso 1: Crear la Red
docker network create traefik-public
Paso 2: Crear el Directorio de Configuración de Traefik
mkdir -p /opt/traefik
cd /opt/traefik
Paso 3: Crear Docker Compose
# docker-compose.yml
version: '3.8'
services:
traefik:
image: traefik:v3.0
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./acme.json:/acme.json
- ./config:/config:ro
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.rule=Host(`traefik.yourdomain.com`)"
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$xxxxx"
networks:
traefik-public:
external: true
Paso 4: Crear la Configuración de Traefik
# traefik.yml
api:
dashboard: true
insecure: false
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
network: traefik-public
file:
directory: /config
watch: true
certificatesResolvers:
letsencrypt:
acme:
email: you@yourdomain.com
storage: /acme.json
httpChallenge:
entryPoint: web
Paso 5: Crear el Almacenamiento de Certificados
touch acme.json
chmod 600 acme.json
mkdir config
Paso 6: Generar la Contraseña del Panel de Control
htpasswd -nb admin your-secure-password
# Resultado: admin:$apr1$...
# Usa esto en docker-compose.yml, duplicando los signos $
Paso 7: Iniciar Traefik
docker compose up -d
Accede al panel de control: https://traefik.yourdomain.com
Añadir Servicios
Ejemplo: Nginx
# En un docker-compose.yml separado
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx.rule=Host(`www.yourdomain.com`)"
- "traefik.http.routers.nginx.entrypoints=websecure"
- "traefik.http.routers.nginx.tls.certresolver=letsencrypt"
networks:
traefik-public:
external: true
¡Eso es todo! Traefik descubre el contenedor y:
- Enruta
www.yourdomain.comhacia él - Obtiene el certificado SSL automáticamente
- Gestiona la terminación HTTPS
Ejemplo: Aplicación Node.js
services:
api:
build: .
container_name: api
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.yourdomain.com`)"
- "traefik.http.routers.api.entrypoints=websecure"
- "traefik.http.routers.api.tls.certresolver=letsencrypt"
- "traefik.http.services.api.loadbalancer.server.port=3000"
networks:
traefik-public:
external: true
Nota: loadbalancer.server.port especifica el puerto del contenedor.
Middleware
Autenticación Básica
labels:
- "traefik.http.middlewares.auth.basicauth.users=user:$$hashed$$password"
- "traefik.http.routers.admin.middlewares=auth"
Limitación de Velocidad
labels:
- "traefik.http.middlewares.ratelimit.ratelimit.average=100"
- "traefik.http.middlewares.ratelimit.ratelimit.burst=50"
- "traefik.http.routers.api.middlewares=ratelimit"
Lista Blanca de IPs
labels:
- "traefik.http.middlewares.ipwhitelist.ipwhitelist.sourcerange=192.168.1.0/24,10.0.0.0/8"
- "traefik.http.routers.admin.middlewares=ipwhitelist"
Cabeceras
labels:
- "traefik.http.middlewares.security.headers.stsSeconds=31536000"
- "traefik.http.middlewares.security.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.security.headers.contentTypeNosniff=true"
- "traefik.http.middlewares.security.headers.frameDeny=true"
Redirección
labels:
- "traefik.http.middlewares.redirect.redirectregex.regex=^https://old.domain.com/(.*)"
- "traefik.http.middlewares.redirect.redirectregex.replacement=https://new.domain.com/$${1}"
Compresión
labels:
- "traefik.http.middlewares.compress.compress=true"
- "traefik.http.routers.web.middlewares=compress"
Múltiples Dominios
Mismo Contenedor
labels:
- "traefik.http.routers.web.rule=Host(`domain1.com`) || Host(`domain2.com`)"
Con Redirección
labels:
- "traefik.http.routers.www.rule=Host(`www.domain.com`)"
- "traefik.http.routers.www.middlewares=redirect-to-apex"
- "traefik.http.middlewares.redirect-to-apex.redirectregex.regex=^https://www\\.(.+)"
- "traefik.http.middlewares.redirect-to-apex.redirectregex.replacement=https://$${1}"
Balanceo de Carga
Múltiples Contenedores
services:
api:
image: myapi
deploy:
replicas: 3
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.domain.com`)"
Traefik balancea automáticamente la carga entre las réplicas.
Sesiones Persistentes
labels:
- "traefik.http.services.api.loadbalancer.sticky.cookie=true"
- "traefik.http.services.api.loadbalancer.sticky.cookie.name=server_id"
Comprobaciones de Salud
labels:
- "traefik.http.services.api.loadbalancer.healthcheck.path=/health"
- "traefik.http.services.api.loadbalancer.healthcheck.interval=10s"
Enrutamiento Basado en Rutas
labels:
- "traefik.http.routers.api.rule=Host(`domain.com`) && PathPrefix(`/api`)"
- "traefik.http.routers.web.rule=Host(`domain.com`) && PathPrefix(`/`)"
Eliminar Prefijo de Ruta
labels:
- "traefik.http.middlewares.strip-api.stripprefix.prefixes=/api"
- "traefik.http.routers.api.middlewares=strip-api"
/api/users se convierte en /users para el backend.
Certificados Comodín
Para *.domain.com:
# traefik.yml
certificatesResolvers:
letsencrypt:
acme:
email: you@domain.com
storage: /acme.json
dnsChallenge:
provider: cloudflare
# docker-compose.yml
environment:
- CF_API_EMAIL=you@domain.com
- CF_API_KEY=your-api-key
Luego usa:
labels:
- "traefik.http.routers.web.tls.certresolver=letsencrypt"
- "traefik.http.routers.web.tls.domains[0].main=domain.com"
- "traefik.http.routers.web.tls.domains[0].sans=*.domain.com"
Configuración Basada en Archivos
Para servicios no Docker, usa el proveedor de archivos:
# /opt/traefik/config/external.yml
http:
routers:
external-service:
rule: "Host(`external.domain.com`)"
service: external-service
tls:
certResolver: letsencrypt
services:
external-service:
loadBalancer:
servers:
- url: "http://192.168.1.100:8080"
Traefik observa el directorio de configuración y recarga automáticamente.
Métricas y Monitorización
Habilitar Métricas
# traefik.yml
metrics:
prometheus:
entryPoint: metrics
buckets:
- 0.1
- 0.3
- 1.2
- 5.0
entryPoints:
metrics:
address: ":8082"
Panel de Grafana
Usa el ID de panel 11462 para métricas de Traefik. Para una configuración completa de monitorización con Grafana, consulta nuestra guía dedicada.
Registros de Acceso
# traefik.yml
accessLog:
filePath: "/var/log/traefik/access.log"
format: json
filters:
statusCodes:
- "400-599"
bufferingSize: 100
Monta el directorio de registros:
volumes:
- ./logs:/var/log/traefik
Solución de Problemas
Contenedor No Descubierto
- Verifica la red:
docker network inspect traefik-public
- Verifica las etiquetas:
docker inspect container_name | grep -A 50 Labels
- Comprueba
traefik.enable=true
SSL No Funciona
- Revisa el registro de ACME:
docker logs traefik 2>&1 | grep -i acme
-
Verifica los permisos de acme.json (600)
-
Asegúrate de que el puerto 80 esté abierto para el desafío HTTP
502 Bad Gateway
- Verifica que el contenedor esté en ejecución
- Comprueba que el puerto sea correcto en las etiquetas
- Revisa los registros del contenedor
Ver la Configuración Activa
El panel de control muestra todos los routers, servicios y middlewares. O bien:
curl http://localhost:8080/api/http/routers
Lista de Verificación para Producción
- Panel de control protegido con autenticación
- acme.json tiene permisos 600
- Registros de acceso habilitados
- Métricas para monitorización
- Comprobaciones de salud configuradas
- Limitación de velocidad en APIs públicas
- Middleware de cabeceras de seguridad
- Aislamiento de red adecuado
Mejor VPS para Traefik
Traefik en sí es muy ligero. Dimensiona según tus servicios:
| Proveedor | Plan | Precio | Ideal Para |
|---|---|---|---|
| Hetzner | CX21 | €5.39 | 5-10 servicios |
| Hostinger | KVM1 | $4.99 | Configuración económica |
| Vultr | VC2 | $12 | Alcance global |
Preguntas Frecuentes
¿Traefik o Nginx Proxy Manager?
Traefik para configuraciones nativas de Docker. NPM para configuraciones más simples basadas en interfaz gráfica.
¿Cuántos servicios puede manejar Traefik?
Cientos fácilmente. Está diseñado para microservicios a escala.
¿Es seguro Traefik?
Sí. No expongas la API sin autenticación. Mantenlo actualizado.
¿Puedo migrar desde Nginx?
Sí. La migración gradual es posible — ejecuta ambos temporalmente.
¿Traefik soporta HTTP/3?
Sí, a partir de la v3.0. Habilítalo en la configuración del entrypoint.
Resumen
Traefik automatiza lo que configurarías manualmente en Nginx:
| Tarea | Nginx | Traefik |
|---|---|---|
| Añadir servicio | Editar config, recargar | Añadir etiquetas |
| Obtener SSL | Ejecutar certbot | Automático |
| Balancear carga | Configurar upstream | Automático |
| Eliminar servicio | Editar config, recargar | Detener contenedor |
Para despliegues con Docker, Traefik es la opción moderna. Configúralo una vez, añade servicios con etiquetas para siempre. Para un flujo de trabajo de despliegue completo, combínalo con Docker Compose.
Ready to get started?
Get the best VPS hosting deal today. Hostinger offers 4GB RAM VPS starting at just $4.99/mo.
Get Hostinger VPS — $4.99/mo// up to 75% off + free domain included
// related topics
// related guides
$1 VPS Hosting 2026: Cheapest VPS Servers Starting at $1/Month
Looking for $1 VPS hosting? Compare the cheapest VPS providers starting from $1-3/month. Real specs, no hidden fees, honest reviews of budget VPS options.
tutorialCaddy Reverse Proxy Guide 2026: Automatic HTTPS Made Easy
Set up Caddy as a reverse proxy with automatic HTTPS, zero-config SSL, and simple Caddyfile syntax. Complete VPS deployment guide.
tutorialCloudflare Tunnel VPS Guide 2026: Expose Services Without Opening Ports
Set up Cloudflare Tunnel on your VPS to expose web apps securely without opening ports or revealing your server IP. Complete guide with Docker and DNS config.
tutorialCoolify VPS Setup Guide 2026: Self-Hosted Vercel Alternative
Deploy Coolify on your VPS for a self-hosted Vercel/Netlify experience. Complete setup guide with Docker, SSL, and app deployments.
Andrius Putna
I am Andrius Putna. Geek. Since early 2000 in love tinkering with web technologies. Now AI. Bridging business and technology to drive meaningful impact. Combining expertise in customer experience, technology, and business strategy to deliver valuable insights. Father, open-source contributor, investor, 2xIronman, MBA graduate.
// last updated: February 8, 2026. Disclosure: This article may contain affiliate links.