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;

  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,表示关闭硬盘缓冲;或是根据实际下载文件大小调整此参数的大小

参考:Nginx下载大文件失败,java.net.sockettimeoutexception_南有乔木的博客-CSDN博客

        Module ngx_http_proxy_module

以上是关于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

window下升级nginx1.9.9到nginx1.20.1

165Nginx1.20.1搭建负载均衡的例子

165Nginx1.20.1搭建负载均衡的例子

Ansible-playbook yum安装nginx1.20.1