我在 Docker 上设置了 Nginx 作为 Tomcat 服务的反向代理。在高负载(测试)下,响应时间出现峰值。
事实证明,没有 Nginx 的 Tomcat 服务实例比前面有 Nginx 的多个服务运行得更好,所以问题出在 Nginx 和 Tomcats 之间。经过进一步检查,我发现 Nginx 的 upper_connect_time 上升到 3 秒,有时甚至达到 7 秒。
我尝试在 Nginx 上使用 keepalive、keepalive_connections、proxy_connect_timeout、worker_processes 和 worker_connections,但没有任何效果。我的下一个目标是尝试提高 Tomcat max_connections 的值。
导致 upper_upstream_connect_time 过高的原因是什么?
答案1
我通过添加解决了这个问题
proxy_http_version 1.1;
proxy_set_header Connection "";
如果没有这些,keepalive 就没有任何意义,所以我对 keepalive 参数的调整没有任何效果。
如果我理解正确的话,http 1.1 允许使用相同的连接同时进行响应和请求,并且在标头中添加连接“”用于保持连接打开。
通俗地说,之前我告诉 Nginx 允许它在上游使用 keepalive,但我没有配置它来知道如何保持连接打开(出现了 http 1.1 和标头连接部分),因此没有使用 keepalive。
最后,正确设置这两个参数后,keepalive 500 足以满足“正常”性能要求,而 keepalive 1000 则可以应对高流量情况。