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

posted @   半条咸鱼  阅读(713)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示