nginx keepalive如何使用


这篇文章主要介绍了nginx keepalive如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇nginx keepalive如何使用文章都会有所收获,下面我们一起来看看吧。默认http1.1协议的请求头是默认开启keepalive,如图:那什么是keepalive?作用是什么?keepalive是在tcp中一个可以检测死连接的机制,作用是保持socket长连接不被断开,属于tcp层的功能,并不属于应用层。tcp层怎么做到保持长连接的呢?先看keepalive的用法:有三个参数,开放给应用层使用默认配置查看:使用方法:应用层这么设置后,会把默认配置覆盖,走手动设置的配置。
对于一个已经建立的tcp连接。如果在keepalive_time时间内双方没有任何的数据包传输,则开启keepalive功能的一端将发送 keepalive数据心跳包,若没有收到应答,则每隔keepalive_intvl时间再发送该数据包,发送keepalive_probes次。一直没有 收到应答,则发送rst包关闭连接。若收到应答,则将计时器清零。抓包验证tcp心跳包内容根据抓包继续分析keepalive发送及回复的心跳包内容:tcp头部结构体源码为:看发送 香港云主机的心跳包内容:继续看回复的心跳包内容 :由上可以看出,tcp维持长连接的心跳包是由浏览器向服务器先出发送一个ack包,然后服务器再回复一个ack包,且带了选项数据nginx会怎么处理keepalive请求,都会做哪些事情?nginx什么时候长连接会断开呢?在nginx通过 setsockopt(ls[i].fd, sol_socket, so_keepalive,(const void *) &value, sizeof(int))开启keepalive后,会始终和客户端保持长连接,如此会出现一个很严峻的问题,每个woker的能保持的连接数是有限的(ep = epoll_create(cycle->connection_n / 2); cycle->connection_n / 2 为epoll能管理的fd上限),如此一来,连接数很快就被耗尽,这时候nginx应该怎么处理 ?为了找到这个答案,我们来看nginx关于keeoalive的两个配置参数keepalive_timeout第一个参数:设置keep-alive客户端连接在服务器端保持开启的超时值(默认75s);值为0会禁用keep-alive客户端连接;第二个参数:可选、在响应的header域中设置一个值“keep-alive: timeout=time”;通常可以不用设置;注:keepalive_timeout默认75skeepalive_requestskeepalive_requests指令用于设置一个keep-alive连接上可以服务的请求的最大数量,当最大请求数量达到时,连接被关闭,值为0会也禁用keep-alive客户端连接;。默认是100。
答案显而易见,通过 keepalive_timeout keepalive_requests 来管理长连接,当一个tcp连接存活时间超过 keepalive_timeout 时则会被close掉,nginx的具体实现,是通过定时器来做的当一个tcp连接最大情书数超过 keepalive_requests 时则也会被close掉通过这两个机制来保证每个worker的连接数不会超过epoll所能管理的数目。关于“nginx keepalive如何使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“nginx keepalive如何使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注开发云行业资讯频道。

相关推荐: 如何快速在云服务器上部署开源应用程序gitlab

今天小编给大家分享一下 如何快速在云服务器上部署开源应用程序gitlab 的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。gitlab介绍gitl…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/17 21:26
下一篇 07/17 21:26

相关推荐