Pamiętaj, że jest to pytanie Traefik V2. Miałem rozwiązanie na V1, ale V2 jest całkowitym przebudowaniem.
Powyższe ma przekierować http://whoami.mysite.com na http s : //whoami.mysite.com.
- Http s działa dobrze.
- Http nie przekierowuje do https i nie generuje błędu 404.
Nie ma innego pliku. Na razie wszystko jest w tym Docker-compose.yml, ponieważ jest to test przygotowujący do dalszego wdrożenia.
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"
Nie musisz konfigurować samej usługi Traefik. Na Traefik musisz mieć tylko punkty wejścia do: 443 (web-secure) i: 80 (web)
Ponieważ Traefik działa tylko jako entryPoint i nie dokona przekierowania, oprogramowanie pośrednie w usłudze docelowej to zrobi.
Teraz skonfiguruj usługę docelową w następujący sposób:
Zasadniczo przepływ przebiega następująco:
Żądanie: http://sub.domain.com:80 -> traefik (usługa) -> mywebserver-web (router, reguła http) -> mywebserver-redirect-web-secure (oprogramowanie pośrednie, przekierowanie do https) - -> mywebserver-web-secure (router, reguła https) -> mywebserver (usługa)
źródło
Ok, znalazłem ... Zakładałem, że oprogramowanie pośrednie może być zadeklarowane na poziomie Traefik, ale muszą być zadeklarowane na poziomie usługi.
Ta linia :
Musi znajdować się na etykietach serwisu Whoami.
Inną kwestią, niezwiązaną z opisanym problemem, jest to, że wyzwanie HTTP musi zostać wykonane na porcie 80.
Usuń „bezpieczny” w „bezpieczny w sieci”.
źródło
traefik.http.middlewares.https-only.redirectscheme.scheme=https
w służbie app mam etykiety:traefik.http.routers.myapp.rule=Host(
$ {APP_HOST})
,traefik.http.routers.myapp.entrypoints=web
,traefik.http.routers.myapp.middlewares=https-only
Szukałem tej odpowiedzi, kiedy szukałem sposobu przekierowania wszystkiego do HTTPS za pośrednictwem Traefik v2.2, a najlepszą opcją dla mnie było dodanie tych zmiennych ENV do Traefik, a to automatycznie przekierowuje cały ruch do HTTPS.
Dzięki temu nie muszę dodawać niczego do oprogramowania pośredniego.
źródło