如何正确设置 nginx 作为代理超时?

Man*_*uel 5 nginx node.js amazon-elb

我在 nginx 中遇到一些 502 错误:

2020/05/05 20:40:05 [错误] 13425#0: *1360447 recv() 失败(104:连接由对等方重置),同时从上游读取响应标头,客户端:172.31.12.13,服务器:,请求:“ POST /app/functionHTTP/1.1”,上游:“ http://127.0.0.1:8080/app/function ”,主机:“example.com”

建筑学:

client - load balancer - instances (each with nginx proxy for NodeJS http server)
Run Code Online (Sandbox Code Playgroud)

超时值:

  • 客户:

    • 请求超时:60s
  • 负载均衡器:

    • 保活超时:60s
  • nginx:

    • http keepalive_timeout: 65s
    • 上游keepalive_timeout:60s
    • 上游保活:256 个连接
    • proxy_connect_timeout: 60 秒
    • proxy_read_timeout: 60 秒
    • proxy_send_timeout: 60s
  • 服务器(NodeJS):

    • 请求超时:50s
    • keepAlive超时:65s
    • headers超时:70s

502 错误很少发生(约占请求的 0.01%),但始终存在。

到目前为止我检查过的内容:

  • 未达到文件描述符的限制
  • 未达到 nginx 连接数限制
  • 未达到 TCP 端口限制
  • CPU、内存、磁盘 I/O 未达到限制

它看起来很像 NodeJS 服务器关闭连接而 nginx 假设连接仍然存在的竞争条件。

当前设置中正确的 nginx 超时值是多少?

(我不确定这是否不是 ServerFault 的问题?)