代码之家  ›  专栏  ›  技术社区  ›  Harald Nordgren

正在Heroku上获取零星的“http:代理错误:读取tcp:i/o超时”[closed]

  •  -3
  • Harald Nordgren  · 技术社区  · 7 年前

    我在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 
    

    有人知道怎么回事吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Vorsprung    7 年前

    在外部,我的代理返回502(上游消失) 我的代理与我的服务对话,该服务返回400(客户端错误) 路由器层返回499(客户端关闭请求)

    发生的情况是,外部调用方正在断开连接,而“我的服务”正在准备返回连接的结果 “我的代理人”。这意味着套接字从“我的代理”端掉下来。

    我的服务端的路由器记录的是499,所以应用程序记录的是400

    你的代码没有问题。使用web服务的外部客户端会提前断开连接,这就是应用程序在日志中的响应方式