背景:Java应用后台服务有一个文件下载接口,通过页面触发并调用该下载接口进行文件下载。前端通过Ingress做请求转发(背后是Nginx代理),使用Chrome浏览器进行大于1GB文件下载的时候下载到1GB就突然报错 "网络错误"

排查过程:

1、下载小于1GB的文件正常;

2、不经过Ingress直接进入应用Pod采用命令行的方式调用下载接口下载大于1GB文件正常;

curl -v --location --request GET 'http://localhost:8080/api/file/download?key=xxx.tar.gz' --header 'Cookie: JSESSIONID=F0AB3381A7E8EC600DAE2FF86C0276C3' --output ./xxx.tar.gz

3、经过Ingress采用命令的方式调用下载接口下载大于1GB文件异常;

# -k --insecure 忽略https所需的TLS证书, -http1.1 指定HTTP协议版本
curl -v --location --request GET 'https://${domain}/api/baas/api/file/download?key=xxx.tar.gz' --header 'Cookie: Cookie: JSESSIONID=F0AB3381A7E8EC600DAE2FF86C0276C3' --output ./xxx.tar.gz  -k --insecure --http1.1

查看Ingress日志如下:

# 下载开始时
2022/01/13 02:13:10 [warn] 29489#29489: *353766035 an upstream response is buffered to a temporary file /tmp/proxy-temp/0000013203 while reading upstream, client: 182.92.253.8, server: ...# 下载出现异常时
2022/01/13 02:17:27 [error] 29489#29489: *353766035 upstream prematurely closed connection while reading upstream, client: 182.92.253.8, server: ...

综上,可基本定位问题出在Ingress代理。

解决:

经查,Ingress背后的 Ngnix 反向代理对Response默认开启了缓存,而缓冲区的大小跟proxy_buffer_size 和 proxy_buffers 有关。如果缓冲区无法装下所有的响应,则响应内容会写入到缓存文件中,缓存文件的大小上限由 proxy_max_temp_file_size 配置项指定,默认为1G。

因此,最简单的办法就是把 proxy_max_temp_file_size 配置的上限提高至大于要下载的文件大小。而我是基于Ingress 容器化来做的代理,因此需要修改应用Helm Chart下的Ingress对应yaml文件,在Ingress 组件下的metadata -> annotations 下添加如下配置项,重新打包并上传Chart至Harbor仓库更新安装即可。

nginx.ingress.kubernetes.io/proxy-max-temp-file-size: "2048m"

下载超过1GB的文件失败问题排查及解决相关推荐

  1. 通过Nginx代理下载超过1GB的文件失败

    项目场景: 浏览通过Nginx代理请求下载超过1GB文件 问题描述 前几天项目开发时发现,通过 Nginx 代理下载 超过1GB的大文件时,出现"网络错误",而在服务器上下载时却很 ...

  2. python open找不到文件的原因_浅谈python在提示符下使用open打开文件失败的原因及解决方法...

    题目:在提示符下使用open打开一个文件 刚开始网上看了下打开的方式,结果一直实现不了,报错是没找到这个文件,而且和我输入的文件名不一样. 错误如下: >>>open('d:\456 ...

  3. ci框架中引入css,php ci框架中加载css和js文件失败的原因和解决方法

    php ci框架中加载css和js文件失败的原因和解决方法 发布时间:2021-07-01 12:08:38 来源:亿速云 阅读:50 作者:chen 本篇内容介绍了"php ci框架中加载 ...

  4. php读取4g文件下载,怎么从Linux服务器上下载超过4G的文件

    使用sz命令下载文件时,超过4G下载不了,如何下载呢? 本文介绍的方法是先对该文件进行拆分,拆分成多个小于4G的文件,然后分别下载,下载到本地后再进行合并或直接解压,具体操作如下: 1.分拆为多个文件 ...

  5. 海康Ehome协议接入EasyCVR视频融合平台播放视频失败的排查与解决

    EasyCVR视频融合平台的视频能力非常灵活,尤其是在接入协议上,不仅能支持主流的标准协议,如国标GB/T28181.RTSP/Onvif.RTMP等,还可以支持厂家的私有协议,包括海康Ehome.海 ...

  6. uboot下tftp下载文件失败的排查步骤

    1.排查步骤 (1)网线是否已经插上单板并连接正常; (2)可以先把网线插到其他设备上,确认网线是否可以正常工作; (3)确认单板与PC之间是否是网络直连:如果不是网络直连,则要先尝试去ping网关地 ...

  7. JSP上传文件失败的问题 未解决

    服务器操作系统:CentOS 7.3 64位 本机:win10上使用WinSCP远程传输文件,使用putty远程执行命令 已经完成的步骤: Tomcat启动 下图,成功启动 后台 Servlet 编写 ...

  8. php ci框架中载入css和js文件失败的原因及解决方法

    在将html页面整合到ci框架里面的时候,载入css和js失败.原因是ci框架是入口的框架 对框架中文件的全部请求都须要经过index.php处理完毕,当载入外部的css和js文件的时候要使 用bas ...

  9. ci框架中引入css,php ci框架中载入css和js文件失败的原因及解决方法

    大神的Blog挂了,从Bing快照里复制过来的备份 UWidget封装SWidget到UMG 2015年8月30日0 为了使用UMG中的一些高级或便利特性,需要将制作好的Slate控件封装到UWidg ...

最新文章

  1. 牛年前的一小结——打响本命年的第一枪,继续刷题!
  2. 20160406作业
  3. Cobbler部署指南之Cobbler安装操作系统篇
  4. 基于特征码文件恢复工具magicrescue
  5. Hi3516A开发--/etc/passwd
  6. 40+张最全Linux/C/C++思维导图,收藏!
  7. 计算机四级数据库真题,2015年计算机四级数据库真题
  8. 西南交通大学计算机组成原理,西南交通大学计算机组成原理课程设计报告
  9. BTC 5分钟内跌幅1.02%,现价38142.29usdt
  10. 《别做正常的傻瓜》读书笔记
  11. 如何将网页实现变灰效果?
  12. 去哪儿网2017校招在线笔试(前端工程师)编程题及JavaScript代码
  13. 题2.pta数据结构题集-File Transfer (25分)
  14. 如何解决BIOS自动更新,不断循环更新,无法进入系统
  15. 实时数据库之数据采集
  16. 微处理器内部结构(寄存器)
  17. 爬虫大作业-爬取B站弹幕
  18. offer收割机: 字节跳动、YY、虎牙、BIGO
  19. 如何使用matlab进行频域分析
  20. JAVA-@Primary的常用方式

热门文章

  1. [代码审计]ThinkPHP5的文件包含漏洞
  2. java微服务架构师,java架构师成长路线-微服务架构的介绍
  3. Java分布式二手房项目尚好房第三课 利用Dubbo拆分微服务
  4. C#求100以内的所有质数
  5. 好嗨游戏:2019第一季度游戏行业报告,初现小阳春
  6. 计算机考试空题,计算机二级考试VB空练习题.doc
  7. js实现table表头冻结(scroll时固定)
  8. 无风扇DIN导轨计算机
  9. GB28181协议实现系列之----IPC实时视频点播(4)
  10. 四川大学计算机导论考试,四川大学计算机导论期末例题.doc