1. 程式人生 > >Nginx後端服務大量TIME-WAIT的解決

Nginx後端服務大量TIME-WAIT的解決

原因

在HTTP1.1協議中,有個 Connection 頭,Connection有兩個值,close和keep-alive,這個頭就相當於客戶端告訴服務端,服務端你執行完成請求之後,是關閉連線還是保持連線,保持連線就意味著在保持連線期間,只能由客戶端主動斷開連線。還有一個keep-alive的頭,設定的值就代表了服務端保持連線保持多久。

HTTP預設的Connection值為close,那麼就意味著關閉請求的一方几乎都會是由服務端這邊發起的。那麼這個服務端產生TIME_WAIT過多的情況就很正常了。

雖然HTTP預設Connection值為close,但是現在的瀏覽器傳送請求的時候一般都會設定Connection為keep-alive了。所以,也有人說,現在沒有必要通過調整引數來使TIME_WAIT降低了。

參考:https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

nginx到後端的預設配置

Passing Request Headers
By default, NGINX redefines two header fields in proxied requests, “Host” and “Connection”,
and eliminates the header fields whose values are empty strings. “Host” is set to the $proxy_host variable,
and “Connection” is set to close.

nginx到後端預設的HTTP版本

Syntax:proxy_http_version 1.0 | 1.1;
   
Default:proxy_http_version 1.0;
   
Context:http, server, location
   
This directive appeared in version 1.1.4.


參考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version

Nginx到後端不開啟keepalive的原因

keepalive的數量很難設定的準確,偏小的話就沒啥作用 偏大的話會影響worker的短連線處理,都是內網 tcp連線的過程耗時應該可忽略吧,==但是帶來的問題可能會造成後端服務的TIME-WAIT增多