Keep-Alive
HTTP 的 Keep-Alive
1、启用情况
(1)HTTP 1.1 中默认开启,通过 headers 设置 Connection: close 关闭
(2)HTTP 1.0 中默认关闭,通过 headers 设置 Connection: Keep-Alive 开启
2、开启 HTTP Keep-Alive 后,能复用已有的 TCP 链接,当前一个请求已经响应完毕,服务器端没有立即关闭TCP链接,而是等待一段时间,接收浏览器端可能发送的第二个请求,通常浏览器在第一个请求返回之后,会立即发送第二个请求
(1)如果某一时刻只能有一个链接,同一个 TCP 链接处理的请求越多,开启 Keep-Alive 能节省的 TCP 建立、关闭的消耗就越多
(2)通常启用多个链接请求资源,开启 Keep-Alive 后,仍能加快资源的加载速度
(3)Keep-Alive 属性保持连接的时间长短,由服务端决定
3、开启场景
(1)明显预知用户会在当前连接上有下一步操作
(2)复用连接,有效减少握手次数
4、关闭场景
(1)访问内联资源一般用缓存,不需要 keep-alive
(2)长时间 TCP 连接,容易导致系统资源被无效占用
对客户端使用 keepalive
1、核心模块:ngx_http_core_module,默认安装
2、keepalive_timeout
(1)语法
keepalive_timeout timeout [header_timeout];
(2)默认值
keepalive_timeout 75s;
(3)位置:http、server、location
(4)第一个参数设置了一个超时时间,在这个超时时间之内,客户端的 keep-alive 连接,将在服务器端保持开放,0 将禁用客户端的保持连接
(5)可选的第二个参数在 Keep-Alive: timeout=time 响应头域中设置一个值。两个参数可能不同
(6)Mozilla 和 Konqueror 识别 Keep-Alive: timeout=time 响应头域,MSIE 在大约 60 秒内自行关闭保持连接
3、send_timeout
(1)设置向客户端传输响应的超时时间
(2)该超时时间只在两个连续的写操作之间设置,而不是为整个响应的传输设置
(3)如果客户端在这个时间内没有收到任何东西,连接就会关闭
(4)语法
send_timeout time;
(5)默认值
send_timeout 60s;
(6)位置:http、server、location
(7)注意:耗时的同步操作有可能会丢弃用户连接
4、keepalive_requests
(1)设置通过一个 keep-alve 连接可以提供的最大请求数
(2)在发出最大数量的请求后,连接被关闭
(3)语法
keepalive_requests number;
(4)默认值
keepalive_requests 1000;
(5)位置:http、server、location
(6)定期关闭连接,对于释放每个连接的内存分配是必要的
(7)因此,使用太高的最大请求数,可能导致内存的过度使用
5、keepalive_disable
(1)禁用指定浏览器的 keep-alive 连接
(2)browser 参数指定哪些浏览器将受到影响
(3)一旦收到 POST 请求
(4)值为 msie6,将禁止与旧版 MSIE 的 keep-alive 连接
(5)值为 safari,将禁止在 macOS 和类似 macOS 的操作系统上,与 Safari 和类似 Safari 浏览器 keep-alive 连接
(6)none 值可以使所有的浏览器 keep-alive 连接
(7)语法
keepalive_disable none | browser ...;
(8)默认值
keepalive_disable msie6;
(9)位置:http、server、location
对上游服务器使用 keep-alive
1、模块:ngx_http_upstream_module
2、keepalive
(1)激活对上游服务器连接的缓存
(2)语法
keepalive connections;
(3)位置:upstream
(4)connections 参数设置保留在每个 worker 进程的缓存中,上游服务器的最大空闲 keep-alive 连接数
(5)当超过 connections 时,最近使用最少的连接会被关闭
(6)注意:keepalive 指令并不限制,一个 nginx 工作进程可以打开的上游服务器的连接总数
(7)connections 参数应该设置为一个足够小的数字,以便让上游服务器也能处理新进入的连接
(8)当使用默认轮询方法以外的负载平衡方法时,有必要在 keepalive 指令之前激活它们
(9)对于 HTTP,proxy_http_version 指令应该被设置为 "1.1","Connection" 响应头域应该被清除
proxy_http_version 1.1;
proxy_set_header Connection "";
(10)HTTP/1.0 可以通过传递 "Connection: Keep-Alive" 响应头字段,到上游服务器,来使用 HTTP/1.0 持久连接,不过不建议使用这种方法
proxy_set_header Connection "Connection: Keep-Alive";
3、keepalive_requests
(1)设置通过一个 keepalive 连接所能提供的最大请求数
(2)在发出最大数量的请求后,连接被关闭
(3)语法
keepalive_requests number;
(4)默认值
keepalive_requests 1000;
(5)位置:upstream
(6)定期关闭连接,对于释放每个连接的内存分配是必要的
(7)因此,使用过高的最大请求数可能导致内存的过度使用
4、keepalive_time
(1)限制通过一个 keepalive 连接处理请求的最大时间
(2)在达到这个时间后,连接会在后续的请求处理后关闭
(3)语法
keepalive_time time;
(4)默认值
keepalive_time 1h;
(5)位置:upstream
5、keepalive_timeout
(1)设置一个超时时间,在这个时间内,与上游服务器的空闲 keep-alive 连接将保持开放
(2)语法
keepalive_timeout timeout;
(3)默认值
keepalive_timeout 60s;
(4)位置:upstream
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战