Cómo configurar Traefik para redirigir HTTP a HTTPS siempre
- traefik
- https
- ssl
- seguridad
- docker
- infraestructura
Redireccionar HTTP a HTTPS es una capa de seguridad obligatoria
Exponer un sitio web vía HTTP en 2026 no es una opción viable. Los navegadores modernos marcan estas conexiones como “no seguras”, lo que genera desconfianza en los usuarios y puede ahuyentar a posibles clientes. Además, sin HTTPS, toda la comunicación entre el cliente y el servidor viaja sin cifrar, dejando expuesta información sensible como credenciales o datos personales.
Traefik y la gestión automática de certificados SSL
Una de las grandes ventajas de Traefik es su capacidad para gestionar certificados SSL automáticamente a través de Let’s Encrypt. Esta funcionalidad elimina la tarea manual de generar, instalar y renovar certificados cada pocos meses. Traefik se encarga de todo esto en segundo plano, siempre que lo configures correctamente con un certificatesresolver.
Para que Traefik pueda obtener y renovar certificados, necesita acceso a los puertos 80 (HTTP) y 443 (HTTPS) de tu servidor. Estos puertos son los que usará Let’s Encrypt para realizar la verificación de dominio (ACME challenge) y emitir el certificado. Mi regla es dejar que Traefik maneje la complejidad del SSL, permitiéndome enfocar en la lógica de la aplicación que estoy desplegando. Si quieres profundizar en cómo Traefik maneja los certificados, tengo un artículo específico sobre cómo configurar SSL con Let’s Encrypt y Traefik que explica los detalles.
Configurando los Entrypoints y el Resolver ACME
Traefik trabaja con “entrypoints”, que son los puntos de entrada de la red donde escucha el tráfico. Necesitamos definir al menos dos: web para el tráfico HTTP (puerto 80) y websecure para HTTPS (puerto 443). El entrypoint web intercepta las peticiones no seguras para aplicar la redirección.
Aquí tienes un ejemplo básico de cómo se definen en el docker-compose.yml para el servicio de Traefik, incluyendo la configuración de un resolver ACME. Estos entrypoints deben estar expuestos en los puertos correctos del host.
version: '3.8'
services:
traefik:
image: traefik:v2.10
command:
- --api.dashboard=true # Habilita el dashboard para monitorizar (solo para entornos controlados)
- --providers.docker
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.myresolver.acme.tlschallenge=true # Usa el desafío TLS para Let's Encrypt
- --certificatesresolvers.myresolver.acme.email=tu.email@example.com # Tu email para notificaciones de Let's Encrypt
- --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json # Fichero para almacenar los certificados
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro" # Acceso al socket de Docker
- "./letsencrypt:/letsencrypt" # Volumen para persistir los certificados
labels:
- "traefik.enable=true"
# Opcional: Router para el dashboard de Traefik
- "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.tudominio.com`)"
- "traefik.http.routers.traefik-dashboard.entrypoints=websecure"
- "traefik.http.routers.traefik-dashboard.service=api@internal"
- "traefik.http.routers.traefik-dashboard.tls.certresolver=myresolver"
- "traefik.http.routers.traefik-dashboard.middlewares=traefik-auth"
- "traefik.http.middlewares.traefik-auth.basicauth.users=user:$$apr1$$HASH$$" # Reemplaza con tu hash de usuario:contraseña
Este docker-compose.yml configura Traefik para escuchar en los puertos 80 y 443 del host, necesario para la validación de Let’s Encrypt. También establece el resolver de certificados myresolver usando el desafío TLS, que es el método preferido para Traefik v2+ por su sencillez. Asegúrate de reemplazar tu.email@example.com y el hash del basicauth.
La redirección HTTP a HTTPS con un Middleware
La redirección se implementa con un middleware de Traefik llamado redirectScheme. Este middleware se aplica al entrypoint HTTP (web) y fuerza a todas las peticiones a usar el esquema https. Para ello, se usa un router genérico que captura todo el tráfico HTTP y le aplica esta regla.
Aquí te muestro cómo añadirlo a tu configuración de Traefik, junto con un servicio de ejemplo (nginx) para que veas el flujo completo:
version: '3.8'
services:
traefik:
image: traefik:v2.10
command:
- --api.dashboard=true # En producción, considera protegerlo o deshabilitarlo
- --providers.docker
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.myresolver.acme.tlschallenge=true
- --certificatesresolvers.myresolver.acme.email=tu.email@example.com
- --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./letsencrypt:/letsencrypt"
labels:
- "traefik.enable=true"
# Router que captura todo el tráfico HTTP y lo redirige
- "traefik.http.routers.http-catchall.entrypoints=web"
- "traefik.http.routers.http-catchall.rule=HostRegexp(`{host:.+}`)" # Captura cualquier host
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
# Middleware de redirección
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true" # Usa 301 para SEO
my-app:
image: nginx:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.my-app.entrypoints=websecure" # Solo escucha en HTTPS
- "traefik.http.routers.my-app.rule=Host(`www.tudominio.com`)"
- "traefik.http.routers.my-app.tls.certresolver=myresolver" # Usa el resolver definido en Traefik
- "traefik.http.services.my-app.loadbalancer.server.port=80" # El puerto interno de Nginx
En este ejemplo, el router http-catchall es genérico y intercepta todo el tráfico que llega por el entrypoint web (HTTP). Le aplicamos el middleware redirect-to-https que fuerza el esquema a https y lo marca como permanente (permanent=true, lo que genera un código 301). Esto asegura que cualquier intento de acceso por HTTP sea automáticamente redirigido a la versión segura de tu web, algo necesario para la seguridad y el SEO. Para entender más sobre la filosofía detrás de Traefik y Docker, puedes leer por qué uso Docker y Traefik en mis proyectos.
Traefik y la seguridad: Lo que ganas y lo que complicas
Implementar Traefik para gestionar tu HTTPS y redirección tiene sus claras ventajas, pero también introduce puntos de fricción que debes conocer. Entender estos tradeoffs es necesario antes de decidirte por esta solución en producción.
Lo que ganas:
- Automatización completa del SSL: Olvídate de la gestión manual de certificados Let’s Encrypt. Traefik los obtiene, instala y renueva por ti sin intervención, reduciendo errores y tiempo de mantenimiento.
- Centralización de la configuración: Todas las reglas de enrutamiento y
seguridadpara tus servicios Docker residen en un único lugar: las etiquetas de tus contenedores. Esto simplifica la visión general de tu infraestructura y facilita su gestión. - Redirección HTTPS por defecto: Aseguras que todo el tráfico a tus aplicaciones sea cifrado sin esfuerzo adicional por cada servicio, aplicando una política de
seguridaduniforme en toda tu plataforma. - Escalabilidad y flexibilidad: Añadir nuevas aplicaciones o modificar rutas es tan sencillo como añadir un nuevo servicio Docker con sus etiquetas de Traefik, sin tocar la configuración principal del proxy. Esto agiliza enormemente el despliegue de nuevas funcionalidades y microservicios.
Lo que complicas:
- Curva de aprendizaje inicial: Entender la lógica de los routers, servicios, middlewares y entrypoints de Traefik requiere una inversión de tiempo. No es un proxy inverso “configurar y olvidar” para principiantes.
- Depuración de configuraciones: Los problemas de enrutamiento o
SSLpueden ser difíciles de diagnosticar si no estás familiarizado con las herramientas de Traefik o su dashboard. Es necesario saber leer los logs y entender la jerarquía de reglas. - Dependencia del proxy: Toda tu infraestructura de servicios web depende de que Traefik esté funcionando correctamente. Un fallo en Traefik puede dejar todas tus aplicaciones inaccesibles, por lo que su monitorización es clave.
- Gestión de versiones y actualizaciones: Como cualquier software, Traefik evoluciona. Es necesario conocer las versiones y posibles cambios en la sintaxis de configuración al actualizar, para evitar interrupciones.
A pesar de la complejidad inicial, la robustez, la automatización y la seguridad intrínseca que ofrece Traefik superan con creces los inconvenientes en un entorno de producción bien gestionado. Una vez dominada, esta herramienta ahorra mucho tiempo y preocupaciones.
Si estás montando un entorno de producción con Traefik, te interesará saber cómo desplegar n8n en producción con Docker y Traefik para automatizar tus flujos de trabajo. Para una visión más amplia de cómo proteger tu infraestructura, aquí tienes una guía para proteger tu web de ataques que complementa estas configuraciones básicas de SSL y redirección. Y si gestionas múltiples webs en un mismo servidor, entender cómo Traefik maneja múltiples webs en un VPS con Docker te será de gran utilidad para optimizar tus recursos.
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í →
¿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.