Nginx下载大文件失败
原因分析:
nginx代理nginx时,前端用户请求下载文件, nginx代理会先从后端nginx拿到文件并缓存到本地,然后响应给客户端,其中与proxy buffer相关的配置项如下:
proxy_buffer_size 512k;
proxy_buffers 4 512k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 512k;
由此可知, buffer缓冲区最大可以缓冲2.5M的数据,然后就开始刷写磁盘,如果磁盘无法写入,数据丢失。这也是为什么前端下载部分数据,即下载不动的原因。
原因分析:
1)代理服务器报告:上游过早的关闭连接,好像问题出在被代理服务器;而被代理服务器则抱怨:上游服务器超时。那么一个很合理的推论是:代理服务器很长时间没向被代理服务器请求数据,被代理服务器认为代理服务器已经掉线或完成任务,于是主动断开连接,代理服务器发现需要数据,再连接时,已经连接不上了。
2)正常的流程应该是:只要客户端一直下载,“客户机->代理服务器->被代理服务器”,这一连串的数据流不会中断,也就不会出现超时。
3)出现超时只能有一种情况:代理服务器缓存了大文件。
4)代理服务器接到下载请求,向被代理服务器请求数据,由于两个服务器之间网速快,所以代理服务器请求速度要远大于向客户端发送的速度,这就导致一下正常的代理方式:代理服务器要缓存数据。
5)但是两个服务器之间的速度实在是太快了,缓存1G数据也就是分分钟的事情,而客户端需要慢慢下载,可能需要十几、甚至几十分钟。代理服务器和被代理服务器这段时间内没有什么事可干,与是两端静默的时间一长,超过了timeout的时间(一般是60s),被代理服务器就认为代理服务器掉线。
解决方案:
1)将代理服务器缓存设置更大,可以直接缓存整个文件,跟上面的解决一样
2)禁用代理服务器缓存:
proxy_pass http://192.168.0.1;
proxy_redirect default;
proxy_buffering off;
3)设置更长的超时时间
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
原文地址:https://www.cnblogs.com/breezey/p/6740229.html
Nginx下载大文件失败相关推荐
- php 7.0 readfile_php readfile下载大文件失败的解决方法
本文实例讲述了php readfile下载大文件失败的解决方法.分享给大家供大家参考,具体如下: 大文件有200多M,只下载了200K就提示下载完成,且不报错. 原因是PHP内存有限制,需要改为按块下 ...
- linux下载大文件失败,Linux下FTP/SFTP传输大文件总是失败的处理办法
海外服务器,一般延迟都比较高.如果不是China Telecom/China Unicom路由直连,延迟更加的不稳定,甚至长连接会经常闪断.国内跨运营商服务器,没有BGP网关,也同样会发生这样的情况, ...
- php readfile 下载大文件失败
大文件有200多M,只下载了200K就提示下载完成,且不报错. 原因是PHP内存有限制,需要改为按块下载,就是把大文件切块后逐块下载. if (file_exists($file)) {if (FAL ...
- php下载效率不高,解决PHP下载大文件失败,并限制下载速度
1.问题: PHP在使用readfile函数定义下载文件时候,文件不可以过大,否则会下载失败,文件损坏且不报错: 2.原因: 这个是因为readfile读取文件的时候会把文件放入缓存,导致内存溢出: ...
- scrapy下载大文件失败问题
利用scrapy下载大量大尺寸图片及视频时有时会报错,显示放弃重试,用户连接时间超过180s导致失去连接 如下 Gave up retrying <GET url> (failed 3 t ...
- python断点续传下载_Python 3 爬虫|第12章:并发下载大文件 支持断点续传
1. stream 流式下载大文件 1.1 stream=True 和 iter_content() 我们将继续使用 Python 3 爬虫|第3章:同步阻塞下载 所搭建的测试环境,在 Nginx 默 ...
- Android 开发工具类 27_多线程下载大文件
多线程下载大文件时序图 FileDownloader.java 1 package com.wangjialin.internet.service.downloader; 2 3 import jav ...
- [MAC]Google Drive下载大文件
在使用Chrome从Google Drive下载8G数据集的过程中,多次出现网络错误问题导致下载失败,特在此记录解决方法. 下载前提:已成功翻墙 一.出错原因: Google Drive下载大文件的时 ...
- 统计APP下载量--发现安卓下载大文件使用多线程下载方式
问题产生 在项目开发过程中,会有各种各样的需求. 而在需求开发过程中,我们常常会遇到从没有见过的问题,这就需要我们一步一步排查. 在一次版本需求中,需要统计不同渠道APP的下载量. 理想很丰满,现实很 ...
最新文章
- 程序员缺乏经验的 7 种表现
- CentOS 5.6配置PPTP+Radius+Daloradius认证服务器傻瓜教程
- Linux-Rsync项目实战(详细) 备份全网服务器数据生产架构方案
- linux下tomcat开启远程调试
- HashMap 排序
- 五一档票房超8.8亿元!张艺谋新片仅第二
- 《Java 开发从入门到精通》—— 2.4 Java的运行机制
- element-ui 固定弹窗底部的按钮
- e4a 悬浮窗和日志框
- 一次计算机社团活动方案,社团活动方案设计方案5篇
- python画星空的程序_Python画好看的星空图
- Java基础教程1-Java特点和手把手教你安装JDK
- Vue.js 3 ssr 中报错Hydration node mismatch: - Client vnode: div - Server rendered DOM:已解决
- 【Minio】实现视频断点续传功能
- 跟益达学Solr5之使用MMSeg4J分词器
- v_rep教程----构建纯净模型
- 利用Python批量下载自己喜欢听得音乐
- 计算机毕业设计Java钢材商贸公司网络购销管理系统(源码+系统+mysql数据库+lW文档)
- 腾讯MIG刘成敏告别邮件:两年前就有退休的想法
- 微信、QQ等即时通信软件为什么没有取代电子邮件?