Traefik2, две точки входа (http и https) к одному открытому континентальному порту в docker -compose - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь настроить Treafik2 как обратный прокси-сервер / завершение SSL для простого flask приложения (uwsgi прослушивает порт 8080) в другом контейнере. Я хочу иметь доступ к сайту через http или https (я знаю, я знаю, что мы должны использовать https! ВЕЗДЕ, поверьте мне, есть веская причина для использования http и https в этом сценарии). За всю жизнь я не могу получить обе работы одновременно, я могу получить только http или https. TLS, если он используется, должен заканчиваться на traefik, в противном случае соединение должно быть просто незашифрованным. Вот мой файл docker -compose (ниже работает только https, если я закомментирую последние две метки маршрутизатора (tls), тогда работает только http). К сожалению, мне немного не хватает документации по traefik, что сбивает меня с толку. Любая помощь приветствуется.

version: '3.3'
services:
    traefik:
      image: "traefik:v2.0.0-rc3"
      container_name: "traefik"
      command:
        - "--log.level=DEBUG"
        - "--api.insecure=true"
        - "--providers.docker=true"
        - "--providers.docker.exposedbydefault=false"
        - "--entrypoints.websecure.address=:443"
        - "--entrypoints.web.address=:80"
        - "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
        - "--certificatesresolvers.mytlschallenge.acme.caserver=https://acme-v02.api.letsencrypt.org/directory"
        - "--certificatesresolvers.mytlschallenge.acme.email=me@example.com"
        - "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
      ports:
        - "443:443"
        - "8080:8080"
        - "80:80"
      volumes:
        - "/mnt/volume_04/letsencrypt:/letsencrypt"
        - "/var/run/docker.sock:/var/run/docker.sock:ro"
    
    example:
      image: exampleflask
      container_name: example
      expose:
        - "8080"
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.example.rule=Host(`example.com`)"
        - "traefik.http.routers.example.entrypoints=web,websecure"
        - "traefik.http.routers.example.tls.certresolver=mytlschallenge"
        - "traefik.http.routers.example.tls.domains[0].main=example.com"
      restart: always

1 Ответ

1 голос
/ 10 июля 2020

У вас было две точки входа «web» и «websecure». Таким образом, вы можете установить два маршрутизатора, это выглядит следующим образом:

Для http:

- "traefik.http.routers.exampleforhttp.rule=Host(`example.com`)"
- "traefik.http.routers.exampleforhttp.entrypoints=web"

Для https:

- "traefik.http.routers.exampleforhttps.rule=Host(`example.com`)"
- "traefik.http.routers.exampleforhttps.entrypoints=websecure"
- "traefik.http.routers.exampleforhttps.tls.certresolver=mytlschallenge"

Или вы хотите перенаправить http на https, как удар:

- "traefik.http.routers.exampleforhttp.rule=Host(`example.com`)"
- "traefik.http.routers.exampleforhttp.entrypoints=web"

- "traefik.http.routers.exampleforhttp.middlewares=http-redirect"
- "traefik.http.middlewares.http-redirect.redirectscheme.scheme=https

- "traefik.http.routers.exampleforhttps.rule=Host(`example.com`)"
- "traefik.http.routers.exampleforhttps.entrypoints=websecure"
- "traefik.http.routers.exampleforhttps.tls.certresolver=mytlschallenge"

Хорошо провести время.

...