nginx的超时场景

场景

我就是认真:正确保障网络连接状态的通断,一文读懂Keepalive工作机制_网易订阅

nginx请求服务端

nginx的代理时间(请求服务端的读取数据时间为30s),服务端的响应时间为60s

nginx发送syn包给服务端

服务端发送syn和ack包给nginx

nginx发送ack给服务端

开始数据传输:nginx发送http请求给服务端

服务端返回ack给nginx

nginx此时等待服务端的数据返回

nginx读取时间30s到时,nginx主动断开连接,nginx发送FIN给服务端(也有可能会带ACK,但是这个标识没有用,没什么意义)

服务端发送ACK给nginx

但是服务端不想断开连接,所以服务端没有发送FIN,此时连接为半关闭状态。此时按理说nginx可以接受服务端的数据,但是nginx已经不接收了(这个可能是nginx自己的设置,跟tcp协议不一样的地方)。

等服务端到60s后,服务端数据已经处理完成,发送http包给nginx。

nginx接受到数据包后,(不是FIN包,nginx此时只接受FIN包,这个应该是nginx自己的设置),会发送RST包给服务端。

服务端收到RST包后,需要重置链接(重新发起SYN包)

客户端浏览器与nginx

浏览器发送syn到nginx

nginx发送ack和syn到浏览器

浏览器发送ack到nginx

浏览器发送http请求到nginx

浏览器等待nginx的响应,nginx此时发送请求到上游,因为nginx此时始终没有发送数据给浏览器,所以keepalive_timeout始终不会计时。

nginx到达30s的读取服务端时间后,因为没有从服务端获取到数据,所以此时发送给浏览器http请求504超时的数据包。

浏览器发送ack给nginx

此时nginx继续等待到65s的keepalive_timeout时间后,发送FIN包给浏览器

浏览器收到FIN后,发送ack到nginx

然后浏览器发送FIN给nginx,

nginx收到FIN后,发送ack给浏览器

浏览器收到ack后进入CLOSE状态

ningx等待2MSL后进入CLOSE状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值