go - 在 Heroku 上获取零星的“http:代理错误:读取 tcp:i/o 超时”
问题描述
我在 Heroku 上偶尔收到此错误:
代理服务:
Dec 27 14:53:05 betalo-turnpike-production app/web.2: { [...] }
Dec 27 14:53:08 my-proxy app/web.2: {
"level":"error",
"ts":"2018-12-27T14:53:07.771Z",
"caller":"httputil/reverseproxy.go:393","msg":"http: proxy error: read tcp [REDACTED]->[REDACTED]: i/o timeout",
"stacktrace":"log.(*Logger).Output
/app/tmp/cache/go1.11.4/go/src/log/log.go:172
log.(*Logger).Printf
/app/tmp/cache/go1.11.4/go/src/log/log.go:179
net/http/httputil.(*ReverseProxy).logf
/app/tmp/cache/go1.11.4/go/src/net/http/httputil/reverseproxy.go:393
net/http/httputil.(*ReverseProxy).defaultErrorHandler
/app/tmp/cache/go1.11.4/go/src/net/http/httputil/reverseproxy.go:158
net/http/httputil.(*ReverseProxy).defaultErrorHandler-fm
/app/tmp/cache/go1.11.4/go/src/net/http/httputil/reverseproxy.go:166
net/http/httputil.(*ReverseProxy).ServeHTTP
/app/tmp/cache/go1.11.4/go/src/net/http/httputil/reverseproxy.go:234
net/http/httputil.(*ReverseProxy).ServeHTTP-fm
[...]
net/http.HandlerFunc.ServeHTTP
/app/tmp/cache/go1.11.4/go/src/net/http/server.go:1964
net/http.serverHandler.ServeHTTP
/app/tmp/cache/go1.11.4/go/src/net/http/server.go:2741
net/http.(*conn).serve
/app/tmp/cache/go1.11.4/go/src/net/http/server.go:1847"}
Dec 27 14:53:08 my-proxy app/web.2: { [...] "status":502}
Dec 27 14:53:09 my-proxy heroku/router: sock=backend at=error code=H18 desc="Server Request Interrupted" [...] dyno=web.2 connect=0ms service=4453ms status=503 protocol=https
调用服务:
Dec 27 14:53:05 my-service app/web.1: { [...] }
Dec 27 14:53:08 my-service app/web.1: { [...] "status":400}
Dec 27 14:53:08 my-service heroku/router: sock=client at=warning code=H27 desc="Client Request Interrupted" [...] dyno=web.1 connect=1ms service=2995ms status=499 bytes=0 protocol=https
有谁知道出了什么问题?
解决方案
在外部,我的代理返回 502(上游消失)我的代理与我的服务对话,返回 400(客户端错误)路由器层返回 499(客户端关闭请求)
发生的事情是外部调用者正在断开连接,而“我的服务”正在准备结果以返回到“我的代理”的连接。这意味着套接字从“我的代理”端删除。
我的服务端的路由器记录了 499,因此应用程序记录了 400
您的代码没有任何问题。使用您的 Web 服务的外部客户端会提前断开连接,这就是应用程序在日志中响应的方式
推荐阅读
- r - Shiny:根据选择更新 selectizeInput 选择
- django - 具有默认值的自引用 ForeignKey 无
- c# - C# Webbrowser 控件,显示的内容与 Document.innerHtml 不匹配
- amazon-web-services - AWS 说此区域不提供 Simple Email Service,如何解决?
- r - .Rprofile 中 R 的命令行参数
- pyspark - 计算 pyspark 中的滚动总和
- informatica-powercenter - 用于 Linux 上托管的 Informatica Power Center 10.x 的开源代码审查工具
- angular - 如何使用服务在 app.module 上初始化一个变量,然后在其他组件中使用它?
- parsing - ANTLR:贪婪规则的问题
- django - Django 识别基于类的视图并形成多个模型