lingering_close 延迟关闭的意义
当 Nginx 处理完成调用 close 关闭连接后,若接收缓冲区仍然收到客户端发来的内容,则服务器会向客户端发送 RST 包关闭连接,导致客户端由于收到 RST 而忽略了 response。
Nginx 发送 close 表示不希望再接收新的数据包了,而客户端如果仍然发送数据,就会直接回复 RST 包,客户端收到之后,就会认为是不正常的连接,从而忽略之前的响应内容。
配置指令
1 | Syntax: lingering_time time; |
lingering_timeout
:在 5s 内检测客户端是否仍然有请求内容到达,若超时后仍没有数据到达,就立刻关闭连接,如果有数据到达,那么就不会关闭连接,而是会等待到lingering_time
后关闭lingering_time
:整体的超时时间,达到这个时间后,不管有没有数据到达都会立刻关闭lingering_close
- off:关闭功能
- on:由 Nginx 判断,当用户请求未接收完(根据 chunk 或者 Content-Length 头部等)时启用功能,否则及时关闭连接
- always:无条件启用功能
以 RST 代替正常的四次握手关闭连接
当其他读、写超时指令生效引发连接关闭时,通过发送 RST 立刻释放端口、内存等资源来关闭连接。这种情况很有可能是客户端异常了,所以需要立刻关闭连接。
1 | Syntax: reset_timedout_connection on | off; |