当前位置:首页 > 技术文章 > 正文内容

为什么通过Nginx下载大文件有时会不完整?

arlanguage3个月前 (01-31)技术文章34

今天接到客户的反馈说访问服务下载大文件不全,用客户提供的链接通过浏览器下载的文件只有1.05个G,原文件有近1.3个G,

使用curl命令在服务器上下载是正常的,文件大小没问题,

相同的测试重复了多次,结果仍然是这样。

通过浏览器访问路径是这样,

浏览器--->公有云负载均衡--->Nginx--->后端Java服务

直接在服务器上访问是这样,

Curl--->Nginx--->后端Java服务

直觉判断是公有云负载均衡导致的,提工单反馈这个问题,平台建议将负载均衡的协议从HTTP改为TCP,但问题还是存在,

抓包结果显示客户端主动断开了连接,有点让人摸不着头脑了,

继续往上溯源,查询Nginx的错误日志发现下面内容:

2024/07/16 12:02:31 [error] 20256#20256: *284535721 upstream prematurely closed connection while reading upstream, client: x.x.x.x, server: xxx.com"

说明后端Java服务在没有完成文件传输的情况下,主动断开了与Nginx的连接,为什么会这样?

原来Nginx默认有一个缓存(针对单个连接),因为占用内存,默认空间很小,只有几十KB。缓存的大小由“proxy_buffer_size”和“proxy_buffers”这两个参数控制,

这个缓存用来存放从上游服务器接收到的数据,如果收到的数据将缓存填满,Nginx会将收到的数据存放在硬盘中的一个临时文件,文件最大大小由参数“proxy_max_temp_file_size”控制,默认是1G,这个文件也填满后,Nginx将不去请求上游服务器,Nginx与上游的连接默认保持60s,超时后连接会断开。

明白这个原理后,我们禁用掉缓存,这样Nginx从上游服务器收到的数据将不在本地缓存,收到上游返回的数据后将立即发送给客户,整条下载路径的速度完全由客户端控制,这样就可以解决这个问题。

禁用掉缓存,

在Nginx配置文件中,增加指令"proxy_buffering off;",问题完美解决。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/1447.html

分享给朋友:

“为什么通过Nginx下载大文件有时会不完整?” 的相关文章

Java 加密解密和数字签名

在做项目中,只要涉及敏感信息,或者对安全有一定要求的场景,都需要对数据进行加密。在Java中原生API即可实现对称加密与非对称加密,并支持常用的加密算法。对称加密对称加密使用单钥完成加解密,加密和解密采用相同的密钥。对称加密的速度快,常用于大量数据进行加密。主流的算法有:AES,3DES。生成3DE...

高端Linux 脚本很有用,赶紧学起来!

Linux 脚本?准确的说叫 Linux Shell 脚本,Shell 脚本是一种被设计用来运行命令行解释器,他是 Linux 系统的一大特色之一。命令行是 Linux 系统中一种非常重要的交互方式,而它的实现基于 Linux 内核和 Shell 程序,为用户提供了强大和灵活的操作方式。使用 Lin...

php培训都学什么?有哪些课程?

PHP入门虽然比较容易简单,但是对于零基础学员来讲,想要学到精髓,并不是一件容易的事情,越到后面学起来越累,因此,最快最便捷的方法就是参加培训,不仅可以快速掌握入门,还能够学到精髓之处,那么PHP培训都有哪些课程?下面我们以六星教育的php培训课程为例来为大家讲解:第一阶段:动态网站开发的三个方面1...

Nginx负载均衡安全配置说明2 nginx负载均衡配置文件

上一节,我们对Nginx安全配置的几个知识点做了一个说明,例如限制IP访问、文件目录禁止访问限制、需要防止DOS攻击、请求方法的限制和限制文件上传的大小这个进行了一个分析说明,详细的文章请关注我的头条号:一点热,在里面看回之前的文章,快速入口Nginx负载均衡的一些安全配置说明其实,配置Nginx的...

为什么一条UPDATE语句有索引反而更慢

先来看看今天要讲的主人翁:UPDATE `i_msg_system` set `deliver`=1 where `uid`=10000 and `msg_group`=0 and `deliver`=0;涉事表结构:CREATE TABLE `i_msg_system` ( `id` int(...

平稳运行半年的系统宕机了,记录一次排错调优的全过程

(一)前言最近发生了一件很让人头疼的事情,已经上线半年且平稳运行半年系统在年后早高峰的使用时发生了濒临宕机的情况。访问速度特别慢,后台查到大量time_wait的连接,从代码层面到架构层面到网络层面排查了几天几夜,总算是有了结果。(二)架构、问题描述先简单描述一下这个系统的架构,公网域名对应的公网I...