如何解决Nginx Buffer机制引发的下载故障

发布时间:2021-10-14 14:52:03 作者:iii
来源:亿速云 阅读:200

本篇内容介绍了“如何解决Nginx Buffer机制引发的下载故障”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Nginx Buffer 机制

在 Nginx 代理过程中,有两种连接:

1.客户端到 Nginx 的连接2.Nginx 到后端服务器的连接

这两个连接的速度不一致,会对客户端的体验带来不良的影响。Nginx 正是通过 Buffer 机制来缓解这个问题。

当启用 buffer 时,Nginx 将会临时存储后端响应内容在内存或者磁盘上,然后慢慢把数据推送给客户端;若关闭,则会按照响应内容的多少立刻同步到客户端。

假设客户端的速度足够快,那么完全可以把 buffer 关掉,让数据尽可能快速到达;如果客户端很慢,就应该保持 buffer 开启,这样有利于 Nginx 和后端的连接复用(本质上是 HTTP 队头阻塞问题)。

大文件下载问题

Nginx Buffer 机制默认处于开启状态,其会根据 proxy_buffer_size 和 proxy_buffers 这两个参数控制写入内存的大小。如果响应大于这个 buffer 大小,Nginx 会继续通过 proxy_max_temp_file_size 参数将响应其余部分写入到磁盘临时文件。

那么问题来了,如果响应还是很大,超过了临时文件的限额怎么办?

等! 此时,Nginx 的 socket 缓冲区也是出于满载状态。由于客户端很慢,Nginx 并没有触发 read 后端操作。这里大概率会触发后端服务器的 write 超时,进而由后端发起 close 操作。

这就是我遇到的问题:proxy_max_temp_file_size 默认为 1G,当客户端的网络比较慢时,临时文件很快就被写满。这时候后端的响应还会继续被接收到 socket 缓冲区,直到缓冲区被打满。此时,Nginx 所在服务器通过滑动窗口 zero 0 告知后端服务器停止发送数据,直至触发了后端的 write 超时。

如何解决Nginx Buffer机制引发的下载故障

而当客户端的网络比较快时,临时文件并不会被写满,或者即使写满了也很快就会消费掉,不至于让后端“阻塞”过长时间触发超时。

如何解决?

1.调整 proxy_max_temp_file_size 大小•调大    让临时文件足够可以缓冲整个响应•调小    让整个链路上的数据流动起来,不要阻塞后端的 write 操作,进而触发后端的超时2.关闭 Buffer     不推荐,会影响 Nginx 到后端的连接复用

“如何解决Nginx Buffer机制引发的下载故障”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. 如何解决SQL语句中执行超时引发网站首页访问故障的问题
  2. 怎么解决Mysql Sleep线程引发的锁等待故障

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:如何使用php实现屏蔽机器人从你的网站搜取email地址

下一篇:基于ERP程序公共代码中出现的问题及过度封装不方便维护怎么办

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》