问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

Nginx篇05——http长连接和keeplive

发布网友 发布时间:2022-11-29 02:14

我来回答

1个回答

热心网友 时间:2023-10-25 18:06

nginx中http模块使用http长连接的相关配置(主要是keepalive指令)和http长连接的原理解释。

连接管理是一个 HTTP 的关键话题:打开和保持连接在很大程度上影响着网站和 Web 应用程序的性能。在 HTTP/1.x 里有多种模型:短连接, 长连接, 和 HTTP 流水线。在解释这三种模型之前,我们需要先明确一些前提知识:

接下来我们开始解释。

在早期,HTTP 使用一个简单的模型来处理这样的连接。这些连接的生命周期是短暂的:每发起一个请求时都会创建一个新的连接,并在收到应答时立即关闭。这就是类似上面说的三次握手,在互联网发展的早期一个网页的资源并没有现在这么多,很多可能只是一个简单的静态页面而已,所以这样的模型显然很OK。客户端获取完所需资源之后,就断开连接,不再占用服务器的资源。

HTTP 短连接模型是最早期的模型,也是 HTTP/1.0 的默认模型。每一个 HTTP 请求都由它自己独立的连接完成;这意味着发起每一个 HTTP 请求之前都会有一次 TCP 握手,而且是连续不断的。实际上,TCP 协议握手本身就是耗费时间的,所以 TCP 可以保持更多的热连接来适应负载。短连接破坏了 TCP 具备的能力,新的冷连接降低了其性能。

后来,网页需要请求的资源越来越多,短连接模型显然已经十分吃力了。因为短连接有两个比较大的问题:创建新连接耗费的时间尤为明显(三次握手很耗费时间),另外 TCP 连接的性能只有在该连接被使用一段时间后(热连接)才能得到改善。因此在HTTP/1.1中引入了长连接模型和流水线模型。

一个长连接会保持一段时间,重复用于发送一系列请求,节省了新建 TCP 连接握手的时间,还可以利用 TCP 的性能增强能力。当然这个连接也不会一直保留着:连接在空闲一段时间后会被关闭(服务器可以使用 Keep-Alive 协议头来指定一个最小的连接保持时间)。

长连接也还是有缺点的;也就是前面提到的资源占用问题,就算是在空闲状态,它还是会消耗服务器资源,也更容易被DDoS攻击。本质上长连接是因为不断地三次握手建立连接消耗的资源要大于维持连接所需要的资源才使用的,如果服务器处于高负载时段或者被DDoS,可以使用非长连接,即尽快关闭那些空闲的连接,也能对性能有所提升。

流水线模型的实现要复杂很多,而已效果也并不是特别好,主要还要考虑到各种兼容性,所以默认是不启用这个流水线模型的,而在HTTP/2中,流水线已经被更好的算法给代替,如 multiplexing 。

默认情况下,HTTP 请求是按顺序发出的。下一个请求只有在当前请求收到应答过后才会被发出。由于会受到网络延迟和带宽的*,在下一个请求被发送到服务器之前,可能需要等待很长时间。流水线是在同一条长连接上发出连续的请求,而不用等待应答返回。这样可以避免连接延迟。理论上讲,性能还会因为两个 HTTP 请求有可能被打包到一个 TCP 消息包中而得到提升。就算 HTTP 请求不断的继续,尺寸会增加,但设置 TCP 的 MSS(Maximum Segment Size) 选项,仍然足够包含一系列简单的请求。

并不是所有类型的 HTTP 请求都能用到流水线:只有 idempotent 方式,比如 GET 、 HEAD 、 PUT 和 DELETE 能够被安全的重试:因为有故障发生时,流水线的内容要能被轻易的重试,即出现了问题重试的成本要尽可能低,否则还不如使用长连接模型。

正确的实现流水线是复杂的:传输中的资源大小,多少有效的 RTT 会被用到,还有有效带宽,流水线带来的改善有多大的影响范围。不知道这些的话,重要的消息可能被延迟到不重要的消息后面。这个重要性的概念甚至会演变为影响到页面布局!因此 HTTP 流水线在大多数情况下带来的改善并不明显。此外,流水线受制于 HOL 问题。

我们还是使用上面的例子来进行解释,这次的握手请求就变了,A一次向B发出了三个请求:

最后这里补充一张图片来对比三种模型之间的差别:

了解了上面的原理之后,Nginx中的keepalive指令我们就非常好理解了,相关的指令主要有三个,我们逐个进行解释:

在upstream模块中配置,启用连接到upstream中的服务器的缓存, connections 参数的主要作用是设定每个Nginx的单个worker进程(each worker process)对于upstream中的server的最大空闲连接数,当超过该数字的时候,会关闭使用得最少的连接。

需要注意的是,keepalive指令并不会*Nginx的所有worker进程能开启的连接到upstream服务器中的连接总数(total number)。也就是如果设得太大了,会导致过多的空闲连接占满了upstream中的server资源,导致新的连接无法建立,因此这个数值的设定需要根据worker进程数量来调整。

keepalive_requests 设定可以通过一个连接(connection)发送的请求(request)数量,超过最大请求数量之后,该连接会被关闭。为了释放每个连接的内存分配,定期关闭连接是很有必要的。因此,不建议将 keepalive_requests 设定过大,否则可能会导致过高的内存占用。

设定连接超时时间,在此设定的时间内,client与upstream中的server的空闲keepalive连接将保持打开状态(open)。此外,虽然官方文档说的默认值是60s,但是1.17.9版本的Nginx在安装之后配置文件nginx.conf上面设定的是65s。

Nginx篇05——http长连接和keeplive

nginx中http模块使用http长连接的相关配置(主要是keepalive指令)和http长连接的原理解释。连接管理是一个 HTTP 的关键话题:打开和保持连接在很大程度上影响着网站和 Web 应用程序的性能。在 HTTP/1.x 里有多种模型:短连接, 长连接, 和 HTTP 流水线。在解释这三种模型之前,我们需要先明确一些前提...

ip动态 - StormProxies

StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球20...

HTTP keepalive详解

假设我们的httpd服务器是nginx, nginx的keepalive_timeout默认是60,即默认开启了http keepalive模式,而且http的长连接会保持60秒,60秒内没有数据来往即关闭连接。 这里我们设置业务sleep 60 秒 可以看到上面是经典的http过程,首先是3次握手建立连接,然后客户端发送请求,服务器处理60秒后返回数据,http响应一旦发送完毕...

京东大佬细说:Nginx反向代理时保持长连接,看完直呼"学到了!"_百度知 ...

HTTP1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。如果我们使用了nginx去作为反向代理或者负载均衡,从客户端过来的长连接请求就会被转换成短连接发送给服务器端。为了支持长连接,我们需要在nginx服务器上做一些配置...

nginx的upstream支不支持长连接

应该是支持 proxy_set_header Connection Keep-Live;

nginx 502

nginx报错 502 no live upstreams while connecting to upstream nginx 跟后端创建了大量的连接。没有使用http1.1长连接导致的(默认是http1.0短连接)。 解决方案:在upstream中添加keepalive配置 默认情况下 Nginx 访问后端都是用的短连接(HTTP1.0),一个请求来了,Nginx 新开一个端口和后端...

Nginx 反向代理 gRPC 长连接服务最佳实践

非gRPC请求则遵循原有方式处理。在处理gRPC长连接服务时,常遇keepalive相关问题。若不配置,Nginx与服务间连接可能为短连接,而非期望的长连接状态。正确配置keepalive确保连接持久,提升服务性能。Nginx ngx_http_grpc_module 文档提供了详细信息,地址为:nginx.org/en/docs/http/...

nginx如何造成http请求堵

Nginx可以在某些情况下造成HTTP请求堵塞的原因有几个。1. 配置错误:Nginx的配置文件中可能存在错误配置,比如并发连接数设置过低、缓冲区大小设置不合理等。这些配置错误可能导致请求堵塞,因为Nginx无法有效地处理并发请求或者无法及时处理大量的请求数据。2. 资源限制:Nginx服务器的硬件资源限制,比如CPU、...

nginx能支持多少长连接

因为Apache ab只能批量请求,不能维持连接,所以自己写了一个HTTP长连接测试工具asyncli.py 基本用法:(pyvenv) $ python asyncli.py --help usage: asyncli.py [-h] [-c CONNECTIONS] [-k KEEPALIVE] url asyncli positional arguments:url page address optional arguments:-h, --help ...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
求bl小说名字!!! 之前看过一本小说,但忘了书名 结局有两个, 是说,有... 求无女主角的非现代都市小说。 帮忙推荐几部好看的耽美动漫拜托各位了 3Q 有什么好看的BL小说介绍给我一下好吗?最好是男男的 古代的最好了 蒂克币是一种投资还是传销 产妇产后乳房胀痛怎么回事 孕妇产后乳房胀痛是什么原因 产后乳房胀痛该怎么办 苹果怎样注销appleid帐号 dk币是什么货币 蒂克币DKcoin是赚钱的捷径,还是骗局 bt下载器怎么用啊。哪个高人能告诉我一下。谢谢。 什么是汽车检测线? BT下载怎么使用 守望先锋只能近战的模式是什么 守望先锋堡垒怎么切换模式 守望先锋2竞技模式怎么开启 守望先锋什么模式团灭最好打 2016一2017cba联赛第七轮广东队赛况和数据 小杰爱吹牛,但是为什么大家都说他讲话很实在,答案他自己说的,猜生肖 动漫角色的口头禅,越多越好谢谢! 用维他奶发面做馒头行不? 爱奇艺怎么设置全屏观看? 上海金珠房地产开发有限公司怎么样? 上海地产北部投资发展有限公司怎么样? 上海高昌房地产发展有限公司怎么样? 孕二十周胎儿有多大了? 请问维他奶业务代表待遇怎么样? 这是什么年份钱? 武汉汉莱宝拍卖有限公司怎么样? 武汉莱宝资产管理有限公司怎么样? 四川省建筑施工企业安管人员考试账号是什么 风景树介绍:皂角树,根刺可入药,15公分1100元左右 皂角树什么品种最贵 付费的炒股软件有用嘛 我该怎样选择化妆品?专业的、善良人请进 芦荟胶用来擦痘痘后需要清洗吗? 红唇妆怎么画最好看?复古红唇妆的画法 我要用什么粉底好 学校里表演,要带妆彩排,浓妆。粉底我只有粉饼,老师说粉扑的厚些,我试了试不错。但其他部位怎么化? za的粉底我应该怎么选 我该用哪种粉底呢? 12和15的最小公倍数是多少用短除法 一套房,没有贷款,请问在买的话,首付多少 我想用我朋友名义购买,他是苏州本地户口,有套房没有贷款记录,首付比例是多少? 2021款别克英朗是一键启动吗 别克英朗工厂在哪里? 2021款别克英朗发动机型号和五凌是同款吗 世界全蒙古族人口怎么分布? 觉得世界全是满满恶意感知不到善,该怎么调整认知? 世界全部名著!要全
  • 焦点

最新推荐

猜你喜欢

热门推荐