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

本文详细讲述了在生产环境中遇到的`Connection reset by peer`错误,分析了并发限制、客户端行为、防火墙影响,并揭示了Nginx proxy_buffer_size配置对问题的关键影响。通过修改Nginx缓存配置解决大文件下载失败问题,适合Spring MVC应用开发者参考。

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

生产环境遇到这个错误

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的缓存配置,或者关闭缓存,完美解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值