Traefik V2 질문입니다. 나는 V1에 대한 해결책을 가지고 있었지만 V2는 완전히 다시 수확되었습니다.
위의 내용은 http://whoami.mysite.com 을 http s : //whoami.mysite.com 으로 리디렉션해야합니다 .
- 는 HTTP 들 잘 노력하고 있습니다.
- http가 https로 리디렉션되지 않고 오류 404가 발생합니다.
다른 파일이 없습니다. 추가 배포를 준비하기위한 테스트이므로이 Docker-compose.yml에 모두 들어 있습니다.
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"
- "--certificatesresolvers.myhttpchallenge.acme.email=me@mail.com"
- "--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"
답변
Gérald Croës의 튜토리얼에는 다음과 같은 작업 솔루션이 있습니다.
https://blog.containo.us/traefik-2-0-docker-101-fc2893944b9d
services:
traefik:
image: "traefik:v2.0.0"
# ...
labels:
# ...
# middleware redirect
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
# global redirect to https
- "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"
- "traefik.http.routers.redirs.entrypoints=web"
- "traefik.http.routers.redirs.middlewares=redirect-to-https"
답변
Traefik 서비스 자체를 구성 할 필요는 없습니다. Traefik에서는 : 443 (웹 보안) 및 : 80 (웹)에 대한 진입 점 만 있으면됩니다.
Traefik은 entryPoint의 역할 만하고 리디렉션을 수행하지 않기 때문에 대상 서비스의 미들웨어가이를 수행합니다.
이제 대상 서비스를 다음과 같이 구성하십시오.
version: '2'
services:
mywebserver:
image: 'httpd:alpine'
container_name: mywebserver
labels:
- traefik.enable=true
- traefik.http.middlewares.mywebserver-redirect-web-secure.redirectscheme.scheme=https
- traefik.http.routers.mywebserver-web.middlewares=mywebserver-redirect-web-secure
- traefik.http.routers.mywebserver-web.rule=Host(`sub.domain.com`)
- traefik.http.routers.mywebserver-web.entrypoints=web
- traefik.http.routers.mywebserver-web-secure.rule=Host(`sub.domain.com`)
- traefik.http.routers.mywebserver-web-secure.tls.certresolver=mytlschallenge
- traefik.http.routers.mywebserver-web-secure.tls=true
- traefik.http.routers.mywebserver-web-secure.entrypoints=web-secure
# if you have multiple ports exposed on the service, specify port in the web-secure service
- traefik.http.services.mywebserver-web-secure.loadbalancer.server.port=9000
따라서 기본적으로 흐름은 다음과 같습니다.
요청 : http://sub.domain.com:80- > traefik (서비스)-> mywebserver-web (라우터, http 규칙)-> mywebserver-redirect-web-secure (미들웨어, https로 리디렉션)- -> mywebserver-web-secure (라우터, https 규칙)-> mywebserver (서비스)
답변
알았어 .. 미들웨어는 Traefik 수준에서 선언 할 수 있지만 서비스 수준에서 선언해야한다고 가정했습니다.
이 라인 :
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
whoami 서비스 레이블에 있어야합니다.
설명 된 문제점과 관련이없는 다른 요점은 http 챌린지를 포트 80에서 수행해야한다는 것입니다.
- "--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web-secure"
“웹 보안”에서 “보안”을 제거하십시오.
답변
Traefik v2.2를 통해 모든 것을 HTTPS로 리디렉션하는 방법을 찾고 있었을 때이 답변을 찾고 있었고 가장 좋은 옵션은이 ENV 변수를 Traefik에 추가하는 것이 었으며 모든 트래픽을 HTTPS로 자동 리디렉션합니다.
TRAEFIK_ENTRYPOINTS_WEB_ADDRESS=:80
TRAEFIK_ENTRYPOINTS_WEBSECURE_ADDRESS=:443
TRAEFIK_ENTRYPOINTS_WEB_HTTP_REDIRECTIONS_ENTRYPOINT_TO=websecure
이를 통해 미들웨어에 아무것도 추가 할 필요가 없습니다.