当前位置: 首页 > backend >正文

nginx 出现大量connect reset by peer

当 Nginx 出现大量 connection reset by peer 错误时,通常意味着客户端(或中间网络设备)主动发送了 TCP RST 包终止了连接。以下是系统化的排查步骤和解决方案:

一、问题原因分析

原因分类具体场景特征
客户端主动终止用户在请求过程中关闭浏览器、客户端代码异常退出、移动端网络切换日志中无规律出现,客户端 IP 分散
服务端配置不当Nginx 或后端服务超时设置过短、Keep-Alive 配置不合理集中出现在高延迟请求或特定接口
网络问题防火墙/负载均衡器主动断开空闲连接、网络丢包、MTU 不匹配伴随 TCP 重传或 packet loss 日志
后端服务异常后端服务崩溃、响应过慢、返回非法数据关联后端错误日志(如 502/504)
攻击或滥用DDoS 攻击、爬虫高频请求、恶意扫描来自少量 IP 的高频异常请求

二、排查步骤与工具

1. 查看 Nginx 日志定位规律

1)检查错误日志error.log):

grep "reset by peer" /var/log/nginx/error.log

统计错误频率、关联的客户端 IP 和请求 URL。

2)分析访问日志access.log):

awk '{print $1, $7, $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

查看高频请求的客户端 IP、URL 和状态码。

2. 监控网络连接状态

1)查看当前连接状态

ss -ant | awk '{print $1}' | sort | uniq -c  # 统计各 TCP 状态数量
netstat -n | grep :80 | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  # 按状态分类统计
  • 关注 CLOSE_WAIT(服务端未关闭)、TIME_WAIT(正常关闭)数量。

  • 抓包分析 RST 来源

    tcpdump -i eth0 'tcp[tcpflags] & (tcp-rst) != 0' -nn  # 捕获 RST 包
    • 确定 RST 是由客户端还是服务端发送。

3. 检查服务端配置
  • Nginx 超时参数

    http {client_header_timeout 60s;     # 客户端请求头读取超时client_body_timeout 60s;       # 客户端请求体读取超时keepalive_timeout 75s;         # Keep-Alive 连接超时send_timeout 60s;              # 响应发送超时
    }
    • 适当增大超时时间(根据业务需求调整)。

  • 后端服务健康检查

    upstream backend {server 10.0.0.1:8080 max_fails=3 fail_timeout=30s;server 10.0.0.2:8080 max_fails=3 fail_timeout=30s;
    }
    • 确保后端服务可用,避免因超时返回 RST。

4. 检查系统资源与内核参数
  • 资源监控

    top -c          # 查看 CPU、内存使用
    dstat -n --tcp  # 监控网络流量和 TCP 状态
    • 排除 CPU、内存、带宽瓶颈。

  • 优化内核参数/etc/sysctl.conf):

    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.tcp_keepalive_probes = 3
    net.ipv4.tcp_keepalive_intvl = 15
    net.ipv4.tcp_max_tw_buckets = 200000  # 限制 TIME_WAIT 数量
    net.ipv4.tcp_tw_reuse = 1             # 允许复用 TIME_WAIT 连接执行 sysctl -p 生效。

三、解决方案

场景 1:客户端主动断开
  • 优化客户端体验

    • 增加前端重试机制(如 HTTP 503 响应时自动重试)。

    • 使用 WebSocket 替代频繁的短连接请求。

场景 2:服务端配置问题
  • 调整超时参数

    location /api {proxy_connect_timeout 60s;proxy_read_timeout 300s;    # 根据后端服务响应时间调整proxy_send_timeout 300s;
    }
场景 3:网络或中间设备问题
  • 检查防火墙/负载均衡器

    • 确认未设置过短的 TCP 空闲超时(如 AWS ELB 默认 60 秒)。

    • 调整 MTU 避免分片(通常 1500,云环境可能需要 1450)。

场景 4:后端服务异常
  • 优化后端性能

    • 检查数据库慢查询、代码死锁、资源泄漏。

    • 添加服务熔断机制(如 Hystrix、Resilience4j)。

场景 5:恶意攻击
  • 防御策略

    • 使用 Nginx 限流:

      limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
      location / {limit_req zone=one burst=20;
      }
    • 启用 WAF(如 ModSecurity)拦截恶意请求。

四、验证与监控

  • 日志监控

    • 使用 ELK(Elasticsearch + Logstash + Kibana)实时分析 Nginx 日志。

  • 网络监控

    • Prometheus + Grafana 监控 TCP 连接状态和错误率。

  • 压测验证

    ab -n 1000 -c 100 http://example.com/api  # Apache Bench 测试

总结

症状优先检查项工具/命令
高频 RST 来自特定 IP防火墙规则、客户端异常行为tcpdumpiptables -L -n
伴随 502/504 错误后端服务健康状态、代理超时设置Nginx error.log、后端服务日志
集中在特定接口接口性能、数据库查询优化slowlog、APM 工具(如 SkyWalking)
网络设备日志显示 RST负载均衡器/防火墙配置云平台监控、设备日志分析

通过系统化排查和针对性优化,可有效减少 connection reset by peer 错误,提升服务稳定性。

http://www.xdnf.cn/news/6204.html

相关文章:

  • 第二章日志分析-apache日志分析
  • 秒删node_modules[无废话版]
  • 数据结构(八)——查找
  • 达梦数据库 【-6111: 字符串转换出错】问题处理
  • HVV蓝队实战面试题
  • 全新开发-iVX图形化编程VS完整IDE
  • 有关多线程
  • vue中,created和mounted两个钩子之间调用时差值受什么影响
  • Ubuntu摄像头打开失败
  • 16S18S_OTU分析(3)
  • 正则表达式(二)-高级应用_谨慎使用
  • Spark之搭建Yarn模式
  • 日本动漫风格人像街拍Lr调色预设,手机滤镜PS+Lightroom预设下载!
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-D. 扩展插件列表(PostGIS/PostgREST等)
  • 搭建Caffeine+Redis多级缓存机制
  • ChatGPT 能“记住上文”的原因
  • nputop:昇腾 NPU 交互式监控工具
  • 基于 NanoDet 的工厂巡检机器人目标识别系统研究与实现​
  • Fluent Bit持久化配置:保障数据可靠传输的关键
  • MVCC:数据库并发控制的利器
  • 【计算机哲学故事1-5】版本更新:拒绝停滞,成长是最好的修复
  • 部署GraphRAG配置Neo4j实现知识图谱可视化【踩坑经历】
  • 【SSL证书系列】https双向认证中客户端认证的原理
  • 边缘计算网关工业物联网应用:空压机远程运维监控管理
  • 自动化 NuGet 包打包与上传:完整批处理脚本详解(含 SVN 支持)
  • MySQL基础原理
  • python之Pandas合并数据终极指南:pd.concat参数详解
  • IDEA 新建 SpringBoot 项目时,没有高版本 SpringBoot 可选
  • Android逆向学习(十) IDA逆向编辑Android so文件
  • 为什么要选择七彩喜数字康养平台?加盟后有何优势?