Как: Docker Swarm - Traefik перенаправляет HTTPS на NGINX-Сервис - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть некоторые проблемы с конфигурацией в моем роевом кластере. У меня есть веб-сервер, работающий на двух узлах, и 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» .

Так что может быть не так? Большое спасибо!

...