文件上传下载遇到的ClientAbortException: java.io.IOException: Connection reset by peer错误

生产环境遇到这个错误

org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peer

博主花费了一天的时间去解决问题,查日志,各种找资料看,最终找到方案解决,废话不多说直接说有价值的东西

背景:由于文件预览的时候出现了这个问题,小文件没有问题,大文件就报错

可能出现的原因
  • 服务器在接受处理用户请求时,自身的cpu、io、内存、线程等资源都是有最大限制的。当并发请求超过服务器的承载量时,服务器会停掉一些请求。(但是要注意如果实际的并发数量没有超过服务器的承载量,可能中了木马病毒问题导致的。这个时候需要分析了)
  • 客户端关闭了浏览器,但是服务端还是继续发送数据。
  • 浏览器端按了Stop。
  • 防火墙/nginx影响了。
    • 一种是他们都设置了超时机制,超过了会关闭这个TCP会话。这个可以通过重新定义心跳机制,进行会话维护。
    • 一种是设置防高频策略。我的就是这种情况

以上是在网上搜的资料,这些情况说实话都不是特别有用,完全说的废话,说不到重点,最后自己找到了解决方案

由于正常spring中上传下载文件配置默认位50M,意思就是说上传50M以下都没有问题,但是我上传900K就出现了问题,最后找到一个帖子,说可能和Nginx有关系
  • NGINX的配置, 发现都是默认的, 了解到 proxy_buffer_size 默认大小是 512k, 超过就会报错,Connection reset by peer, 应该是 Tomcat 的http 连接 超出了nginx 的大小限制 被强行 reset, 因而出现下载失败的问题

附spring默认文件配置代码

# 前缀prefix
spring.thymeleaf.prefix=classpath:templates/
# 后缀suffix
spring.thymeleaf.suffix=.html
# charset=<encoding> is added
spring.thymeleaf.encoding=UTF-8
#content-type
spring.thymeleaf.content-type=text/html
#set to false for hot refresh
spring.thymeleaf.cache=false
spring.thymeleaf.mode=LEGACYHTML5
spring.http.multipart.maxFileSize=50Mb
spring.http.multipart.maxRequestSize=500Mb
解决方案
  • 修改nginx的缓存配置,或者关闭缓存,完美解决
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值