Nginx 高upstream_connect_time

Nginx 高upstream_connect_time

我在 Docker 上設定了 Nginx 作為 Tomcat 服務的反向代理。在重負載(測試)下,我的回應時間出現峰值。

事實證明,一個沒有 Nginx 的 Tomcat 服務實例比前面有 Nginx 的多個服務運作得更好,所以問題出在 Nginx 和 Tomcat 之間。經過進一步檢查,我發現Nginx的upstream_connect_time長達3秒,有時甚至7秒。

我嘗試在 Nginx 上使用 keepalive、keepalive_connections、proxy_connect_timeout、worker_processes 和worker_connections,但沒有任何幫助。我的清單中的下一步是嘗試為 Tomcat max_connections 嘗試更高的值。

上游連線時間高的原因可能是什麼?

答案1

我通過添加解決了這個問題

proxy_http_version 1.1; 
proxy_set_header Connection ""; 

如果沒有這些,keepalive 就沒有任何意義,所以我對 keepalive 參數的設定沒有任何效果。

如果我理解正確的話,http 1.1 允許使用相同的連接來同時回應和請求,並在標頭中添加 Connection "" 用於保持連接開啟。

用外行的話來說,之前我對 Nginx 說允許在上游使用 keepalive,但我沒有配置它來知道如何保持連接打開(有 http 1.1 和頭連接部分),所以沒有使用 keepalive 。

最後,正確設定這兩個參數後,keepalive 500 足以滿足「正常」效能,但保留 keepalive 1000 來應付高流量情況。

相關內容