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