nginx1.20.1+springboot2(tomcat) 下载大文件抛ClientAbortException: java.net.SocketTimeoutException
Posted Rogger_chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx1.20.1+springboot2(tomcat) 下载大文件抛ClientAbortException: java.net.SocketTimeoutException相关的知识,希望对你有一定的参考价值。
问题描述:前后端分离项目,nginx用于分发请求,后端sprinboot2(tomcat)提供下载功能。通 过前端请求下载大文件(超过1.5G)。内网测试正常。通过外网请求时
分析:nginx 已设置 读取、发送超时间,
proxy_send_timeout 1800s;
proxy_read_timeout 1800s;
- 分析错误日志发现,从请求开始到抛出异常时间在5分钟以内;且直接通过springboots后端下载时间超过15分钟也没报错。因此可排由于服务器超时时间设置的问题。
- 从内网测试,浏览器的下载文件速率达到4M;而外网测试下载文件速率只有1.2M.因此可能的原因在于nginx的配置上;
- 查看nginx的配置文档,及参考网上资料可知:
- nginx默认开启缓存,proxy_max_temp_file_size 默认为1024M。由于nginx与tomcat同处于内网,下载速率比较快,而浏览器从nginx下载时是先读取nginx的缓存,且由于外网带宽限制,无法及时读取缓存,nginx的临时硬盘文件缓存超过了1024M。
解决方法:
- 压缩需要下载的文件大小;
- 修改proxy_max_temp_file_size配置,设置为0,表示关闭硬盘缓冲;或是根据实际下载文件大小调整此参数的大小
参考:Nginx下载大文件失败,java.net.sockettimeoutexception_南有乔木的博客-CSDN博客
以上是关于nginx1.20.1+springboot2(tomcat) 下载大文件抛ClientAbortException: java.net.SocketTimeoutException的主要内容,如果未能解决你的问题,请参考以下文章
nginx1.20.1+springboot2(tomcat) 下载大文件抛ClientAbortException: java.net.SocketTimeoutException
nginx1.20.1+springboot2(tomcat) 下载大文件抛ClientAbortException: java.net.SocketTimeoutException