Nginx 反向代理丢失一些 HTTP 响应

Nginx 反向代理丢失一些 HTTP 响应

我这里遇到一种情况,Nginx ( nginx/1.14.2) 反向代理充当几个 HTTP 服务器的负载平衡器。有时 HTTP 响应无法到达客户端,就好像连接被过早切断了一样。如果没有位于客户端和 HTTP 服务器之间的负载平衡器,就不会发生这种情况,所以我猜这一定与 Nginx 配置有关。为什么会出现这种情况?如何进一步诊断并最终解决问题?

我已增加到error_loginfo观察到只有info(例如没有warning)消息出现。我还安装了NGINX Prometheus 导出器并且在整个情况下它都显示nginx_connections_accepted等于nginx_connections_handled,所以显然它没有注意到任何失败的连接(例如由于超时)。nginx_connections_active在我的情况下上升到 19,这应该没事因为worker_processes* worker_connections= 2 * 768 >> 19. 在总共处理了大约 100000 个连接中,只有少数连接出现了上述错误。

我的 Nginx 配置中与负载平衡相关的典型条目如下所示。我特意选择了 TCP 负载平衡(而不是特定的 HTTP 负载平衡)。

stream {
  # ...
  server {
    listen 1.2.3.4:443;
    proxy_pass u_123;
  }
  upstream u_123 {
    server 1.2.3.5:2345 max_fails=0;
    server 1.2.3.6:2345 max_fails=0;
    server 1.2.3.7:2345 max_fails=0;
    server 1.2.3.8:2345 max_fails=0;
  }
  # ...
}

相关内容