Veuillez noter qu'il s'agit d'une question Traefik V2. J'avais une solution sur V1 mais V2 est un remaniement total.
Ce qui précède est censé rediriger http://whoami.mysite.com vers http s : //whoami.mysite.com.
- Le http s fonctionne bien.
- Le http ne redirige pas vers https et génère une erreur 404.
Il n'y a pas d'autre fichier. Tout est dans ce Docker-compose.yml pour le moment car c'est un test pour préparer un déploiement ultérieur.
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"
Vous n'avez pas besoin de configurer le service Traefik lui-même. Sur Traefik, il vous suffit d'avoir des points d'entrée à: 443 (Web-Secure) et: 80 (Web)
Parce que Traefik agit uniquement en tant que point d'entrée et ne fera pas la redirection, le middleware sur le service cible le fera.
Configurez maintenant votre service cible comme suit:
Donc, fondamentalement, le flux se passe comme suit:
Demande: http://sub.domain.com:80 -> traefik (service) -> mywebserver-web (routeur, règle http) -> mywebserver-redirect-web-secure (middleware, redirection vers https) - -> mywebserver-web-secure (routeur, règle https) -> mywebserver (service)
la source
Ok, trouvé ... J'ai supposé que les middlewares pouvaient être déclarés au niveau Traefik mais ils devaient être déclarés au niveau du service.
Cette ligne :
Doit être dans les étiquettes du service whoami.
Un autre point, qui n'est pas lié au problème décrit, est que le défi http doit être fait sur le port 80.
Supprimez le "sécurisé" dans "Web sécurisé".
la source
traefik.http.middlewares.https-only.redirectscheme.scheme=https
et service app - je une étiquette:traefik.http.routers.myapp.rule=Host(
$ {} APP_HOST)
,traefik.http.routers.myapp.entrypoints=web
,traefik.http.routers.myapp.middlewares=https-only
Je cherchais cette réponse lorsque je cherchais comment tout rediriger vers HTTPS via Traefik v2.2 et la meilleure option pour moi était d'ajouter ces variables ENV à Traefik et il redirige automatiquement tout le trafic vers HTTPS.
Avec cela, je n'ai pas besoin d'ajouter quoi que ce soit au middleware.
la source