使用Traefik访问我的Web应用程序时,我经常遇到请求失败的情况。
我正在使用:
一切都在单个AWS EC2实例上运行。我主要是使用Traefik从letsencrypt获取自动生成的SSL证书
在大多数情况下,一切都如我所愿。但是定期在浏览器中加载我的页面时会挂起。当我检查“网络”标签时,可以看到某些请求的文档无法加载。
我打开了访问日志,并在Traefik中将日志级别设置为DEBUG,然后重新加载页面,直到看到错误为止。我第一次能够捕获该错误,日志没有表明有任何错误。他们显示Traefik对该文档的回复为200。这是safari网络窗格的相关日志部分和屏幕截图
日志:https://pastebin.com/DUegF4UU
捕获了更多的成功和失败之后,我最终能够看到与日志相关的错误:
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
以及网络窗格:
一些注意事项:
1)并非每次请求都如此
2)即使发生了,我也不一定会看到错误
3)在用DEBUG记录的10个失败中,两次出现“请求已中止”错误,一次出现“ TLS握手错误”
仅出于完整性考虑,以下是成功请求的日志和网络窗格:
日志:https://pastebin.com/f1WhUWYk
这是我的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容器中运行时,我只会收到响应失败。当我直接在主机上运行它(我的应用仍在docker中运行)时,我再也看不到任何问题。