Bitte beachten Sie, dass es sich um eine Traefik V2-Frage handelt. Ich hatte eine Lösung für V1, aber V2 ist ein totaler Rewamp.
Dies oben soll http://whoami.mysite.com zu http s : //whoami.mysite.com umleiten.
- Das http s funktioniert gut.
- Das http leitet nicht zu https um und löst einen Fehler 404 aus.
Es gibt keine andere Datei. Im Moment befindet sich alles in dieser Docker-compose.yml, da es sich um einen Test handelt, um die weitere Bereitstellung vorzubereiten.
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"
Sie müssen den Traefik-Dienst nicht selbst konfigurieren. Auf Traefik benötigen Sie nur Einstiegspunkte für: 443 (web-sicher) und: 80 (web)
Da Traefik nur als entryPoint fungiert und die Umleitung nicht ausführt, übernimmt die Middleware des Zieldienstes dies.
Konfigurieren Sie nun Ihren Zieldienst wie folgt:
Im Grunde geht der Fluss also so:
Anfrage: http://sub.domain.com:80 -> traefik (Dienst) -> mywebserver-web (Router, http-Regel) -> mywebserver-Redirect-Web-Secure (Middleware, Weiterleitung zu https) - -> mywebserver-web-Secure (Router, https-Regel) -> mywebserver (Dienst)
quelle
Ok, gefunden ... Ich nahm an, dass Middlewares auf Traefik-Ebene deklariert werden könnten, aber diese müssen auf Service-Ebene deklariert werden.
Diese Linie :
Muss auf den Etiketten des whoami-Dienstes stehen.
Ein weiterer Punkt, der nicht mit dem beschriebenen Problem zusammenhängt, ist, dass die http-Abfrage an Port 80 durchgeführt werden muss.
Entfernen Sie das "sichere" in "web-sicher".
quelle
traefik.http.middlewares.https-only.redirectscheme.scheme=https
und in App - Service habe ich ein Label:traefik.http.routers.myapp.rule=Host(
$ {APP_HOST})
,traefik.http.routers.myapp.entrypoints=web
,traefik.http.routers.myapp.middlewares=https-only
Ich habe nach dieser Antwort gesucht, als ich gesucht habe, wie alles über Traefik v2.2 zu HTTPS umgeleitet werden kann. Die beste Option für mich war, diese ENV-Variablen zu Traefik hinzuzufügen und den gesamten Datenverkehr automatisch zu HTTPS umzuleiten.
Damit muss ich der Middleware nichts hinzufügen.
quelle