Как настроить Traefik для использования Django Sites Framework - PullRequest
0 голосов
/ 04 июня 2019

Я тестирую cookiecutter-django на производстве, используя Docker-compose и Traefik с Let'sencrypt.Я пытаюсь настроить его для работы с двумя доменами (mydomain1.com и mydomain2.com), используя сайты Django.

Как настроить Traefik, чтобы он мог перенаправлять трафик на необходимый домен?

Это мой traefik.toml

logLevel = "INFO"
defaultEntryPoints = ["http", "https"]

# Entrypoints, http and https
[entryPoints]
  # http should be redirected to https
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  # https is the default
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

# Enable ACME (Let's Encrypt): automatic SSL
[acme]
# Email address used for registration
email = "mail@mydomain1.com"
storage = "/etc/traefik/acme/acme.json"
entryPoint = "https"
onDemand = false
OnHostRule = true
  # Use a HTTP-01 acme challenge rather than TLS-SNI-01 challenge
  [acme.httpChallenge]
  entryPoint = "http"

[file]
[backends]
  [backends.django]
    [backends.django.servers.server1]
      url = "http://django:5000"

[frontends]
  [frontends.django]
    backend = "django"
    passHostHeader = true
    [frontends.django.headers]
      HostsProxyHeaders = ['X-CSRFToken']
    [frontends.django.routes.dr1]
      rule = "Host:mydomain1.com"

Теперь все домены работают через ssl, но я вижу только mydomain1.com, а mydomain2.com показывает ERR_TOO_MANY_REDIRECTS.

1 Ответ

0 голосов
/ 05 июня 2019

Что вы пробовали? Что не сработало? Читая ваш вопрос, трудно сказать.

В вопросе есть элемент ответа , который вы открыли в репозитории cc-django.

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

Предполагая, что вы настроили docker-compose для запуска контейнеров django на портах 5000 и 5001, я думаю, вам нужно настроить раздел backends и frontends, как показано ниже:

[backends]
  [backends.django1]
    [backends.django1.servers.server1]
      url = "http://django:5000"
  [backends.django2]
    [backends.django2.servers.server1]
      url = "http://django:5001"

[frontends]
  [frontends.django1]
    backend = "django1"
    passHostHeader = true
    [frontends.django1.headers]
      HostsProxyHeaders = ['X-CSRFToken']
    [frontends.django1.routes.dr1]
      rule = "Host:mydomain1.com"
  [frontends.django2]
    backend = "django2"
    passHostHeader = true
    [frontends.django2.headers]
      HostsProxyHeaders = ['X-CSRFToken']
    [frontends.django2.routes.dr1]
      rule = "Host:mydomain2.com"

Я не пробовал это, но это было бы первым, что я сделал бы. Кроме того, похоже, что мы можем задать правила для интерфейсов для настройки маршрутизации.

...