400-920-5594
173-6014-8050
首页 > 资讯中心 > 技术分享
Nginx限流熔断实战复盘:解决流量突刷、恶意请求打崩后端服务问题
2026-09-01 81 技术分享

成都软件开发

  线上服务最可怕的故障,往往不是正常业务流量扛不住,而是突发异常流量

  爬虫批量刷接口、恶意脚本高频请求、活动瞬间流量峰值、用户重复疯狂提交,都能瞬间把后端服务打满线程、打高CPU,导致正常用户请求也跟着超时、排队、报错,最终引发服务雪崩。

  我之前线上遇到过一次典型事故:凌晨爬虫批量遍历接口,无间隔高频请求,后端Spring服务线程瞬间打满,所有接口全部卡死,前端页面大面积打不开,排查日志全是重复无效请求。

  事后复盘发现:后端有限流,但是网关层没做拦截。大量无效流量穿透到业务层,挤占正常资源,导致服务直接瘫痪。

  很多开发者误以为限流是后端事情,其实真正稳定的线上架构,一定是Nginx网关层优先拦截、后端业务层精准防护的双层防护体系。

  今天结合真实线上故障,不讲废话,带大家吃透Nginx限流、熔断、防刷、IP封禁全套生产方案,彻底杜绝流量击穿导致的服务雪崩。

一、为什么后端限流不够用?

很多项目只在接口内部做Redis计数器限流、令牌桶限流,看似稳妥,实则存在巨大短板。

第一,所有恶意流量、无效请求依然会经过Nginx、进入后端服务、占用线程池和CPU资源,哪怕最终拦截返回报错,资源损耗已经产生

第二,高并发瞬间流量,后端限流组件有短暂处理延迟,峰值击穿风险极高。

第三,爬虫、恶意IP高频访问,无法快速拉黑,持续消耗服务器带宽和连接数。

简单来说:后端限流是补救,Nginx限流是兜底。真正的防护,必须在流量进入服务之前就拦截掉脏流量。

二、Nginx核心限流原理(两种生产模式)

Nginx官方提供两种成熟限流模块,适配不同生产场景,也是目前企业通用的标准方案。

1、limit_req_zone:限制请求频率(秒级请求数)

核心作用:控制单IP每秒最大请求次数,专治高频刷接口、短时间密集请求,适合所有查询、提交类接口。

2、limit_conn_zone:限制并发连接数

核心作用:限制单IP同时在线连接数,防止单IP大量长连接、批量请求占满服务器连接池。

两者搭配使用,既能限制频率,又能限制并发,形成完整流量防护屏障。

三、生产级限流完整配置(可直接上线)

成都软件开发

下面给一套中小企业通用、稳定、无BUG的Nginx限流配置,适配99%的Web、接口、前后端分离项目。

全局限流配置:

# 定义请求限流区域:单IP每秒最多5次请求,缓存区域10M
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;

# 定义并发连接限流:单IP最大同时连接20
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

server {
    listen 80;
    server_name localhost;

    # 开启请求限流,突发峰值允许缓存10个,超出直接拒绝
    limit_req zone=req_limit burst=10 nodelay;
    # 开启并发连接限制
    limit_conn conn_limit 20;
    # 限流返回状态码509
    limit_req_status 509;
}

配置解释:

单IP每秒最多5次正常请求,短时峰值可以缓冲10个突发请求,不会直接报错,兼顾用户体验和防刷安全;同时限制单IP最大20个并发连接,防止连接池被打满。

四、白名单机制:避免内网、测试、爬虫误杀

直接全局限流很容易误杀办公IP、测试环境、运维机器,生产必须搭配白名单。

# 白名单IP直接放行
geo $limit_white_ip {
    default 1;
    127.0.0.1 0;
    192.168.1.0/24 0;
}

# 白名单不限流
map $limit_white_ip $limit_req_switch {
    0 "";
    1 req_limit;
}

内网IP、运维IP、测试IP全部跳过限流规则,既保证安全,又不影响日常开发运维。

五、精准接口限流:保护核心高危接口

成都软件开发

全局限流相对温和,针对下单、支付、提交、查询列表等高危接口,需要单独加强防护,防止单点接口被打崩。

location /api/order/create {
    # 下单接口严格限流,每秒2次,无缓冲峰值
    limit_req zone=order_limit rate=2r/s nodelay;
    proxy_pass http://backend_server;
}

核心接口单独限流,普通接口宽松限流,差异化防护,是生产最优策略。

六、恶意IP自动封禁(根治爬虫刷接口)

成都软件开发

单纯限流只能拒绝请求,无法阻止持续攻击。针对长期高频恶意IP,可以结合日志+定时脚本拉黑,或者使用Nginx黑名单临时封禁。

高频报错、高频限流触发的IP,基本都是爬虫和恶意访问,直接加入黑名单封禁1小时,可极大降低服务器压力。

七、生产高频踩坑总结

1、只做后端限流,不做网关限流

流量已经穿透进服务才拦截,资源已经被消耗,无法防雪崩。

2、限流参数设置不合理

限制太严误杀正常用户,限制太松起不到防护效果,必须根据业务QPS微调。

3、没有白名单机制

导致内网测试、运维访问被拦截,影响业务排查。

4、所有接口统一限流

核心高危接口和普通接口规则一致,高危接口依然容易被打穿。

八、总结

线上服务稳定性,核心在于脏流量不进服务

绝大多数接口雪崩、服务卡顿、CPU莫名飙升,根源都是没有网关层防护,任由恶意流量、突发流量穿透到业务层。

Nginx限流作为第一道防线,成本最低、性能最高、防护最稳,配合后端限流形成双层防护,可以彻底解决线上流量击穿、接口雪崩、爬虫刷接口等各类高频故障。

推荐文章查看更多》