Обратите внимание, что это вопрос Traefik V2. У меня было решение на V1, но V2 - это полное обновление.
Это выше предполагается перенаправление http://whoami.mysite.com к HTTP s : //whoami.mysite.com.
- Http s работает хорошо.
- 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"
Вам не нужно настраивать сам сервис Traefik. В Traefik вам нужно иметь только точки входа: 443 (веб-защита) и: 80 (веб)
Поскольку Traefik действует только как entryPoint и не будет выполнять перенаправление, промежуточное программное обеспечение в целевой службе сделает это.
Теперь настройте целевой сервис следующим образом:
Так что в основном поток выглядит так:
Запрос: http://sub.domain.com:80 -> traefik (служба) -> mywebserver-web (маршрутизатор, правило http) -> mywebserver-redirect-web-secure (промежуточное ПО, перенаправление на https) - -> mywebserver-web-secure (маршрутизатор, правило https) -> mywebserver (служба)
источник
Хорошо, нашел ... Я предположил, что промежуточное программное обеспечение может быть объявлено на уровне Traefik, но оно должно быть объявлено на уровне обслуживания.
Эта строка:
Должен быть в ярлыках сервиса whoami.
Другой момент, который не связан с описанной проблемой, заключается в том, что вызов http должен выполняться на порте 80.
Удалите «безопасный» в «веб-безопасный».
источник
traefik.http.middlewares.https-only.redirectscheme.scheme=https
и в приложении службы у меня есть метки:traefik.http.routers.myapp.rule=Host(
$ {APP_HOST})
,traefik.http.routers.myapp.entrypoints=web
,traefik.http.routers.myapp.middlewares=https-only
Я искал этот ответ, когда искал, как перенаправить все в HTTPS через Traefik v2.2, и лучшим вариантом для меня было добавление переменных ENV в Traefik, и оно автоматически перенаправляет весь трафик в HTTPS.
При этом мне не нужно ничего добавлять в промежуточное ПО.
источник