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增多