nginx1.20.1+springboot2(tomcat) 下载大文件抛ClientAbortException: java.net.SocketTimeoutException

在前后端分离项目中,使用Nginx分发请求,Spring Boot(Tomcat)处理下载。遇到超过1.5G大文件下载时,外网请求会抛出ClientAbortException: java.net.SocketTimeoutException。分析发现,问题可能出在Nginx的默认缓存设置,即proxy_max_temp_file_size。解决方案包括:压缩文件或调整该配置,关闭或限制硬盘缓冲大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:前后端分离项目,nginx用于分发请求,后端sprinboot2(tomcat)提供下载功能。通                      过前端请求下载大文件(超过1.5G)。内网测试正常。通过外网请求时

 

 分析:nginx 已设置   读取、发送超时间,

        proxy_send_timeout 1800s;
        proxy_read_timeout 1800s;

  1. 分析错误日志发现,从请求开始到抛出异常时间在5分钟以内;且直接通过springboots后端下载时间超过15分钟也没报错。因此可排由于服务器超时时间设置的问题。
  2. 从内网测试,浏览器的下载文件速率达到4M;而外网测试下载文件速率只有1.2M.因此可能的原因在于nginx的配置上;
  3. 查看nginx的配置文档,及参考网上资料可知:
  4.    nginx默认开启缓存,proxy_max_temp_file_size 默认为1024M。由于nginx与tomcat同处于内网,下载速率比较快,而浏览器从nginx下载时是先读取nginx的缓存,且由于外网带宽限制,无法及时读取缓存,nginx的临时硬盘文件缓存超过了1024M。

解决方法:

  1. 压缩需要下载的文件大小; 
  2.  修改proxy_max_temp_file_size配置,设置为0,表示关闭硬盘缓冲;或是根据实际下载文件大小调整此参数的大小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值