Observe que se trata de uma pergunta do Traefik V2. Eu tinha uma solução em V1, mas V2 é uma rewamp total.
Isso acima deve redirecionar http://whoami.mysite.com para http s : //whoami.mysite.com.
- O http s está trabalhando bem.
- O http não redireciona para https e gera um erro 404.
Não há outro arquivo. Tudo está neste Docker-compose.yml no momento, pois é um teste para preparar uma implantação 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"
docker
docker-compose
traefik
Thib
fonte
fonte
Você não precisa configurar o próprio serviço Traefik. No Traefik, você só precisa ter pontos de entrada para: 443 (seguro pela web) e: 80 (web)
Como o Traefik age apenas como entryPoint e não fará o redirecionamento, o middleware no serviço de destino fará isso.
Agora configure seu serviço de destino da seguinte maneira:
Então, basicamente, o fluxo é assim:
Solicitação: http://sub.domain.com:80 -> traefik (serviço) -> mywebserver-web (roteador, regra http) -> mywebserver-redirect-web-secure (middleware, redirecionar para https) - -> mywebserver-web-secure (roteador, regra https) -> mywebserver (serviço)
fonte
Ok, encontrei ... Presumi que os middlewares pudessem ser declarados no nível do Traefik, mas estes devem ser declarados no nível de serviço.
Está linha :
Tem que estar nos rótulos do serviço whoami.
Outro ponto, que não está relacionado ao problema descrito, é que o desafio do http deve ser feito na porta 80.
Remova o "seguro" em "seguro da web".
fonte
traefik.http.middlewares.https-only.redirectscheme.scheme=https
e no serviço aplicativo eu tenho rótulos:traefik.http.routers.myapp.rule=Host(
$ {} APP_HOST)
,traefik.http.routers.myapp.entrypoints=web
,traefik.http.routers.myapp.middlewares=https-only
Eu estava procurando por essa resposta quando estava procurando como redirecionar tudo para HTTPS via Traefik v2.2 e a melhor opção para mim foi adicionar essas variáveis ENV ao Traefik e ele redireciona automaticamente todo o tráfego para HTTPS.
Com isso, não preciso adicionar nada ao middleware.
fonte