Traefik «Запрос был прерван» и «Ошибка рукопожатия TLS» отображается в журналах - PullRequest
0 голосов
/ 10 января 2019

У меня возникают периодические сбои запросов при доступе к моему веб-приложению с помощью Traefik.

Я использую:

  • Приложение Dockerized Flask с Gunicorn
  • официальный почтовый контейнер Postgres
  • официальный контейнер для перевозки грузов Traefik
  • docker-compose для запуска всех вышеперечисленных контейнеров

Все работает на одном экземпляре AWS EC2. В основном я использую Traefik для получения автоматически сгенерированного SSL-сертификата от letsencrypt

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

Я включил журналы доступа и установил уровень журнала DEBUG в Traefik и перезагружал свою страницу, пока не смог увидеть ошибку. В первый раз, когда мне удалось зафиксировать ошибку, журналы не указывали, что что-то не так. Они показали, что Трафик отвечает документом с ответом 200. Вот соответствующая часть журнала и снимок экрана панели сети Safari

log: https://pastebin.com/DUegF4UU

enter image description here

После регистрации большего количества успехов и неудач я в конечном итоге смог увидеть ошибку, которая может иметь значение в журналах:

traefik    | time="2019-01-09T22:14:54Z" level=debug msg="Request has been aborted [96.92.159.193:63283 - /admin/static/vendor/jquery.min.js?v=2.1.4]: net/http: abort Handler"
traefik    | time="2019-01-09T22:15:08Z" level=debug msg="http: TLS handshake error from 96.92.159.193:37272: EOF"

Вот полный набор соответствующих строк журнала: https://pastebin.com/9uXxFDEs

И сетевая панель:

enter image description here

Несколько замечаний:

1) Это происходит не с каждым запросом

2) Даже когда это происходит, я не обязательно вижу ошибку

3) Из 10 сбоев, которые я запечатлел в журнале отладки, дважды появилась ошибка «Запрос был прерван», а однажды обнаружена «Ошибка квитирования TLS»

Просто для полноты, вот панель журнала и сети для успешного запроса:

log: https://pastebin.com/f1WhUWYk

enter image description here

Вот мой файл traefik.toml:

debug = false
logLevel = "DEBUG"
defaultEntryPoints = ["http", "https"]

[web]
# Port for the status page
address = ":8080"
[web.auth.basic]
users = ["admin:nope"]

# 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 = "mine"
storageFile = "/etc/traefik/acme.json"
entryPoint = "https"
onDemand = false
OnHostRule = true
[acme.httpChallenge]
entryPoint = "http"

[retry]

# Enable Docker configuration backend
[docker]
endpoint = "unix:///var/run/docker.sock"
watch = true
exposedbydefault = false

Пожалуйста, дайте мне знать, если какая-либо дополнительная информация может быть полезна.

РЕДАКТИРОВАТЬ: После дополнительных экспериментов кажется, что я получаю сбои ответа, только когда Traefik работает в контейнере Docker. Когда я запускаю его прямо на главном компьютере (с моим приложением, все еще работающим в докере), я больше не вижу никаких проблем.

...