客户端长连接
Nginx与客户端是默认长连接的,在http请求中,一般情况下,客户端不会主动关闭tcp连接,所以tcp连接完全受到Nginx控制,一些配置可以设置连接的属性
- keepalive_disable :设置不与哪些浏览器建立长连接,默认值为msie6(禁用与旧版本MSIE的保持活动连接),可选值还有safari (在macOS和类似macOS的操作系统上禁用与safari和类似safari的浏览器的保持活动连接),none(启用与所有浏览器的保持活动连接)
- keepalive_requests:设置一个长连接上最大请求数量,默认值为1000
- keepalive_time:长连接最大时间,默认为1小时
- keepalive_timeout:长连接超时时间,默认为75秒,与keepalive_time不同的是,keepalive_timeout是两次信息传输最大的间隔时间,如果间隔时间超过它,就会断开连接
服务端长连接
与客户端不同,Nginx与服务端之间默认不会保持长连接,在请求完成之后,就会关闭连接,需要通过upstream开启长连接,也就是如果需要和服务端打开长连接必须使用到upstream,所有相关长连接的配置也都是在upstream下面的
1 | upstream server { |
- keepalive:最大保持长连接数,这个配置是没有默认值,一旦配置就相当于打开了与服务端的长连接,而具体的值就是Nginx与服务端可以保持多少个长连接,如果已经达到配置的值,那么新的连接在请求完之后会自动关闭。在开启长连接的情况下,在转发http请求时时需要加上proxy_http_version 1.1、proxy_set_header Connection “”配置或者proxy_set_header Connection “Keep-Alive”,这是因为无论客户端的Connection请求头是什么,Nginx代理转发后会变成close,所以需要显式设置代理Connection请求头

- keepalive_requests:设置一个长连接上最大请求数量,默认值为1000
- keepalive_time:长连接最大时间,默认为1小时
- keepalive_timeout:长连接超时时间,默认60秒,与keepalive_time不同的是,keepalive_timeout是两次信息传输最大的间隔时间,如果间隔时间超过它,就会断开连接
