Tenga en cuenta que es una pregunta de Traefik V2. Tuve una solución en V1 pero V2 es una renovación total.
Se supone que lo anterior redirige http://whoami.mysite.com a http s : //whoami.mysite.com.
- El http s está funcionando bien.
- El http no redirige a https y genera un error 404.
No hay otro archivo. Todo está en este Docker-compose.yml por el momento, ya que es una prueba para preparar una implementación adicional.
version: "3.3"
services:
traefik:
image: "traefik:v2.0"
container_name: "traefik"
command:
- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web-secure.address=:443"
- "--certificatesresolvers.myhttpchallenge.acme.httpchallenge=true"
- "--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web-secure"
#- "--certificatesresolvers.myhttpchallenge.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "[email protected]"
- "--certificatesresolvers.myhttpchallenge.acme.storage=/letsencrypt/acme.json"
labels:
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoami:
image: "containous/whoami"
container_name: "whoami"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.mysite.com`)"
- "traefik.http.routers.whoami.entrypoints=web"
- "traefik.http.routers.whoami.middlewares=redirect-to-https@docker"
- "traefik.http.routers.whoami-secured.rule=Host(`whoami.mysite.com`)"
- "traefik.http.routers.whoami-secured.entrypoints=web-secure"
- "traefik.http.routers.whoami-secured.tls=true"
- "traefik.http.routers.whoami-secured.tls.certresolver=myhttpchallenge"
No necesita configurar el servicio Traefik en sí. En Traefik solo necesita tener puntos de entrada a: 443 (web-secure) y: 80 (web)
Debido a que Traefik solo actúa como entryPoint y no realizará la redirección, el middleware en el servicio de destino lo hará.
Ahora configure su servicio de destino de la siguiente manera:
Entonces, básicamente, el flujo es así:
Solicitud: http://sub.domain.com:80 -> traefik (servicio) -> mywebserver-web (enrutador, regla http) -> mywebserver-redirect-web-secure (middleware, redirigir a https) - -> mywebserver-web-secure (enrutador, regla https) -> mywebserver (servicio)
fuente
Ok, encontrado ... Supuse que los middlewares podrían declararse a nivel de Traefik, pero estos deben declararse a nivel de servicio.
Esta línea :
Tiene que estar en las etiquetas del servicio whoami.
Otro punto, que no está relacionado con el problema descrito, es que el desafío http debe hacerse en el puerto 80.
Elimine el "seguro" en "web-secure".
fuente
traefik.http.middlewares.https-only.redirectscheme.scheme=https
y en el servicio de aplicaciones tengo unas etiquetas:traefik.http.routers.myapp.rule=Host(
$ {} APP_HOST)
,traefik.http.routers.myapp.entrypoints=web
,traefik.http.routers.myapp.middlewares=https-only
Estaba buscando esta respuesta cuando estaba buscando cómo redirigir todo a HTTPS a través de Traefik v2.2 y la mejor opción para mí era agregar estas variables ENV a Traefik y redirige automáticamente todo el tráfico a HTTPS.
Con esto no tengo necesidad de agregar nada al middleware.
fuente