У меня есть некоторые проблемы с конфигурацией в моем роевом кластере. У меня есть веб-сервер, работающий на двух узлах, и nginx настроен на принудительное использование SSL. Теперь мне нужно сохранение сеанса и, следовательно, использование Traefik в качестве обратного прокси / loadbalancer. Я застрял на том, как настроить службу traefik для восходящего потока на мой веб-сервис.
Мой Трафик-Сервис выглядит так:
services:
loadbalancer:
image: traefik
command: --web --docker --docker.swarmmode --docker.watch --docker.domain=mydomain.prod --logLevel=DEBUG
ports:
- "80:80"
- "8080:8080"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- $PWD/traefik.toml:/etc/traefik/traefik.toml
labels:
- "traefik.enable=false"
networks:
- frontend
deploy:
replicas: 1
placement:
constraints: [node.role==manager]
restart_policy:
condition: on-failure
Часть развертывания моего веб-сервиса:
deploy:
restart_policy:
condition: any
mode: global
placement:
constraints: [node.role==worker]
update_config:
parallelism: 1
delay: 20s
failure_action: rollback
max_failure_ratio: 1
order: stop-first
labels:
- "traefik.enable=true"
- "traefik.docker.network=my_frontend"
- "traefik.backend=my_website"
- "traefik.port=443"
- "traefik.frontend.redirect.entryPoint=https"
- "traefik.backend.loadbalancer.sticky=true"
- "traefik.frontend.rule=Host:mydomain.prod"
Файл Traefik-TOML (не уверен, если мне это нужно):
logLevel = "DEBUG"
defaultEntryPoints = ["https", "http"]
# WEB interface of Traefik - it will show web page with overview of frontend and backend configurations
[web]
address = ":8080"
# Connection to docker host system (docker.sock)
[docker]
watch = true
# This will hide all docker containers that don't have explicitly
# set label to "enable"
exposedbydefault = false
# Force HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443
Если я разверну этот стек, я не получу никаких ошибок. Теперь подключение к mydomain.prod через порт 80 перенаправляет меня на https, как и предполагалось, но NGINX говорит
Ошибка 400 - «Простой HTTP-запрос был отправлен на порт HTTPS» .
Так что может быть не так? Большое спасибо!