nginx长连接
很多参考教程都说设置nginx长连接是设置keepalive_timeout,往往忽视了keepalive_requests,nginx的keepalive_requests默认是100,一个长连接100次和短连接也差不多了。
keepalive_timeout含义
长连接有tcp/ip层面和http层面的,http1.1默认是长连接的,一般也只需要设置http层面的,即keepalive_timeout.
keepalive_timeout time表示一个长连接如果在time秒没有数据传输,nginx将会主动断掉该连接。nginx默认是75s,一般qps比较大时可以将该时间改小,建议timewait状态的连接数。
keepalive_requests含义
keepalvie_requsts 100表示一个长连接最多接收100次数据传输,nginx将会断掉该长连接。nginx默认是100次。
综述
所以,nginx的http层的长连接由上述两个参数共同控制。
实战经验
如果负载均衡使用4层的,开启了长连接,长连接建立起来后,4层的负载均衡并不能控制该连接。如果参数设置不合理,如keepalive_requests比较大时,负载均衡停止一台机器的权重,但该机器上已经建立起来的长连接会在很长一段时间存活,并且这些长连接一直在一个进程,这些会造成负载不均匀问题。
使用7层的负载均衡就无所谓了,因为负载均衡会upstream到后台服务器,负载均衡会与后台服务器建立自己的长连接,会重新分发连接。