Nginx可以通过keepalive模块处理长连接。长连接允许客户端在同一个TCP连接上发送多个请求,以减少连接握手的开销,提高网站性能。
keepalive_timeout指令用于设置长连接超时时间:
keepalive_timeout timeout [header_timeout];
- timeout:长连接的超时时间,单位为秒,超过该时间长连接自动关闭。
- header_timeout:可选,用于设置接收客户端请求报文头部的超时时间,如果在该时间内没有接收到请求头部,长连接自动关闭,默认为0,不设置超时。
配置示例:
keepalive_timeout 5 60;
server {
listen 80;
keepalive_requests 100; # 长连接上允许的最大请求数
...
}
上例设置了长连接总超时时间为60秒,接收客户端请求头部的超时时间为5秒。一个长连接上最多允许100个请求,超过自动关闭长连接。
长连接的工作原理:
- 客户端发起第一个请求,请求头部的Connection字段值为keepalive,表示要求启用长连接。
- Nginx根据配置判断是否启用长连接,如果允许则在响应报文头部添加”Connection: keepalive”。
- 客户端可以在同一个连接上继续发送请求,Nginx会根据配置的keepalive_timeout及keepalive_requests限制连接的超时时间和最大请求数。
- 如果客户端超过限制或者主动关闭连接,Nginx会自动关闭长连接。
keepalive模块的主要优点是:
- 降低连接创建和关闭的开销,提高网站性能。
- 避免TIME_WAIT状态的产生,减少端口的消耗。