【问题标题】:Node app upstream prematurely closed connection while reading response节点应用上游在读取响应时过早关闭连接
【发布时间】:2019-07-16 14:55:21
【问题描述】:

有关于此的手动问题/答案,但我的问题没有从那里的任何解决方案中解决,所以我在这里写。

我的节点应用程序在我的开发环境中运行良好,但是当我请求一些需要很长时间的 api 时,它会抛出 502 错误。

在查看日志时我遇到了这个问题

2019/02/22 12:16:57 [错误] 2575#0: *2 上游过早关闭 从上游读取响应标头时连接,客户端: 172.31.85.97,服务器:,请求:“GET /api//m2/v1/metrics_report?auth=asdsdffk HTTP/1.1”,上游: “http://172.17.0.3:80/api/m2/v1/metrics_report?auth=asdsdffk”,主持人: "",引用者:""

【问题讨论】:

  • 你是用nginx做代理,用expressjs做后端吗?
  • 是的,我正在使用相同的 @Ashvin777
  • 两者都在同一台机器上运行,对吧?您共享的这些日志是由 express 应用程序生成的,还是您在 api 响应中得到的?
  • 日志是从 AWS 生成的
  • 您是否正在使用需要额外时间响应的 API 进行一些大数据操作?发生这种情况后,您的 express js 是否停止工作或不会崩溃?您可以通过什么方式共享快速应用日志?

标签: javascript node.js amazon-web-services nginx


【解决方案1】:

我认为来自nginx 的错误表明与服务器的连接已关闭。在导致这种情况的大数据处理过程中,express 应用程序中一定有问题。您可以尝试增加 nginx 中的超时以正确调试 -

location / {
    proxy_read_timeout 1000s;
    proxy_connect_timeout 1000s;
    ....
}

【讨论】:

    【解决方案2】:

    就我而言,这是express 配置错误。因此,在阅读并四处寻找之后,我终于想出了答案。像下面的例子一样设置httpServer的超时时间:

    var httpServer = app.listen(8000, () =>
       console.log('App is listening on port 8000.')
    )
    
    httpServer.setTimeout(1000)
    

    【讨论】:

      猜你喜欢
      • 2017-08-12
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2013-04-29
      • 2018-09-21
      • 2019-01-17
      • 2018-03-12
      • 1970-01-01
      相关资源
      最近更新 更多