Traefik v2: 404 при глобальной маршрутизации HTTP-трафика на HTTPS - PullRequest
1 голос
/ 02 ноября 2019

У меня проблема в том, что я могу маршрутизировать трафик HTTPS, но я не могу глобально перенаправить трафик HTTP на HTTPS. В моем случае мне нужен только HTTPS-трафик, поэтому я хочу перенаправить весь входящий трафик.

В настоящее время я получаю сообщение об ошибке 404, когда пытаюсь обслуживать свои URL-адреса по HTTP. Я уже включил журналы отладки в Treafik, но я не вижу никаких проблем или нестандартных вещей в журналах.

Кроме того, я увидел довольно похожую тему здесь, в Stackoverflow, но мы обнаружили, что его ошибка не совпадает с моей: Как перенаправить http в https с помощью ярлыков Traefik 2.0 и Docker Compose?

Следующая настройка основана на записи в блоге здесь: https://blog.containo.us/traefik-2-0-docker-101-fc2893944b9d

Моя настройка

Я настроил Traefik в моем рое следующим образом:

global:
  checkNewVersion: false
  sendAnonymousUsage: false
api:
  dashboard: true
entryPoints:
  web:
    address: :80
  websecure:
    address: :443
providers:
  providersThrottleDuration: 2s
docker:
  watch: true
  endpoint: unix:///var/run/docker.sock
  swarmMode: true
  swarmModeRefreshSeconds: 15s
  exposedByDefault: false
  network: webgateway
log:
  level: DEBUG
accessLog: {}
certificatesResolvers:
  default:
    acme:
    email: {email}
    storage: /etc/traefik/acme/acme.json
    httpChallenge:
      entryPoint: web

И запустил Traefik со следующим файлом docker-compose

version: '3'

services:
proxy:
    image: traefik:latest
    ports:
    - "80:80"
    - "443:443"
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - /data/docker_data/traefik/traefik-2.yml:/etc/traefik/traefik.yml
    - /data/docker_data/traefik/acme-2.json:/etc/traefik/acme/acme.json
    labels:
    # redirect
    - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
    - "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"
    - "traefik.http.routers.redirs.entrypoints=web"
    - "traefik.http.routers.redirs.middlewares=redirect-to-https"

Мои сервисы настроены со следующими метками:

traefik.http.routers.myapp.rule=Host(`myapp.ch`)
traefik.http.routers.myapp.service=myapp
traefik.http.routers.myapp.entrypoints=websecure
# I don't think that the following one is required here...
# traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
traefik.http.routers.myapp.tls.certresolver=default
traefik.http.services.myapp.loadbalancer.server.port=3000
traefik.http.routers.myapp.tls=true
traefik.enable=true

Есть идеи, почемуэто не работает?

1 Ответ

1 голос
/ 02 ноября 2019

Вам не нужно настраивать сам сервис Traefik. В Traefik вам нужно иметь только точки входа: 443 (websecure) и: 80 (web)

Поскольку Traefik действует только как entryPoint и не будет выполнять перенаправление, промежуточное программное обеспечение в целевой службе сделает это.

Теперь настройте вашу целевую службу следующим образом:

version: '2'
services:
  mywebserver:
    image: 'httpd:alpine'
    container_name: mywebserver
    labels:
      - traefik.enable=true
      - traefik.http.middlewares.mywebserver-redirect-websecure.redirectscheme.scheme=https
      - traefik.http.routers.mywebserver-web.middlewares=mywebserver-redirect-websecure
      - traefik.http.routers.mywebserver-web.rule=Host(`sub.domain.com`)
      - traefik.http.routers.mywebserver-web.entrypoints=web
      - traefik.http.routers.mywebserver-websecure.rule=Host(`sub.domain.com`)
      - traefik.http.routers.mywebserver-websecure.tls.certresolver=mytlschallenge
      - traefik.http.routers.mywebserver-websecure.tls=true
      - traefik.http.routers.mywebserver-websecure.entrypoints=websecure
      # if you have multiple ports exposed on the service, specify port in the websecure service
      - traefik.http.services.mywebserver-websecure.loadbalancer.server.port=9000

Таким образом, в основном процесс выглядит так:

Запрос: http://sub.domain.com:80 -> traefik (служба) -> mywebserver-web (маршрутизатор, правило http) -> mywebserver-redirect-websecure (промежуточное ПО, перенаправление на https) -> mywebserver-websecure (маршрутизатор, правило https) -> mywebserver (служба)

...