Traeffik не отображает входящий 443 на порт 80 внутренне

Наша проблема в том, что трафик от точки входа https (вероятно) перенаправляется на бэкэнд с неправильным портом. Доступ к точке входа http работает должным образом: трафик распределяется между серверами 1 2 3. при использовании точки входа https мы получаем страницу 404, которая не найдена. TLS в порядке, соединение безопасно, но похоже, что traefik не меняет порт для внутреннего сервера на: 80.

Мы делаем шифрование через traefik, и это выглядит неплохо.

Вот как мы начинаем движение:

docker run -d -p 443:443 -p 80:80 -v /home/pi/lbtest/traefik/traefik.toml:/traefik.toml -v /home/pi/lbtest/traefik/acme.json:/acme.json traefik

А это наш traefik.toml

debug = true

[file]

defaultEntryPoints = ["http", "https"]

[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

[frontends]
  [frontends.lbtest]
  backend = "lbtest"
    [frontends.lbtest.routes.route0]
    rule = "Host:xxx.gotdns.ch"

[backends]
  [backends.lbtest]
    [backends.lbtest.servers.server1]
    url = "http://192.168.178.81:80"
    [backends.lbtest.servers.server2]
    url = "http://192.168.178.49:80"
    [backends.lbtest.servers.server3]
    url= "http://192.168.178.64:80"


[acme]
email = "[email protected]"
storageFile = "acme.json"
acmeLogging = true
entryPoint = "https"
onHostRule = true

[acme.httpChallenge]
entryPoint = "http"

[[acme.domains]]
main = "xxx.gotdns.ch"

Почему работает http://xxx.gotdns.ch - он распределяет нагрузку между серверами 1 2 3, но не для https://xxx.gotdns.ch. Любые идеи?


person Sven Haiges    schedule 27.04.2018    source источник


Ответы (1)


Проблема с полем defaultEntryPoints в вашей конфигурации:

debug = true

defaultEntryPoints = ["http", "https"] # <-- move the field here

[file]

[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

[frontends]
  [frontends.lbtest]
  backend = "lbtest"
    [frontends.lbtest.routes.route0]
    rule = "Host:xxx.gotdns.ch"

[backends]
  [backends.lbtest]
    [backends.lbtest.servers.server1]
    url = "http://192.168.178.81:80"
    [backends.lbtest.servers.server2]
    url = "http://192.168.178.49:80"
    [backends.lbtest.servers.server3]
    url= "http://192.168.178.64:80"


[acme]
email = "[email protected]"
storageFile = "acme.json"
acmeLogging = true
entryPoint = "https"
onHostRule = true

[acme.httpChallenge]
entryPoint = "http"

[[acme.domains]]
main = "xxx.gotdns.ch"

Я рекомендую писать вашу конфигурацию так:

debug = true

defaultEntryPoints = ["http", "https"]

[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

[acme]
email = "[email protected]"
storageFile = "acme.json"
acmeLogging = true
entryPoint = "https"
onHostRule = true

[acme.httpChallenge]
entryPoint = "http"

[[acme.domains]]
main = "xxx.gotdns.ch"

[file]
[frontends]
  [frontends.lbtest]
  backend = "lbtest"
    [frontends.lbtest.routes.route0]
    rule = "Host:xxx.gotdns.ch"

[backends]
  [backends.lbtest]
    [backends.lbtest.servers.server1]
    url = "http://192.168.178.81:80"
    [backends.lbtest.servers.server2]
    url = "http://192.168.178.49:80"
    [backends.lbtest.servers.server3]
    url= "http://192.168.178.64:80"
person ldez    schedule 28.04.2018
comment
У меня такая же ситуация. Как я могу установить ту же конфигурацию, используя метку контейнера? Я использую docker-compose для обработки всех своих услуг. Один из наших контейнеров должен связать другой контейнер, используя URL: example.com, который является другим контейнером. Но я получу неправильный порт, потому что ссылка была изменена на порт 172.17.0.x: 443, который я не могу использовать. Это должно быть 172.17.0.x: 80. Любая идея ? - person cobenash; 23.09.2018