Nginx 限流与防刷入门:limit_req 让服务扛住突发流量

举报
yd_256292196 发表于 2026/11/09 09:03:10 2026/11/09
【摘要】 用 Nginx 的 limit_req 给接口加上速率限制:两行配置实现按 IP 限流、削峰防刷,让服务扛住突发流量。

接口平时跑得好好的,某天突然被大量请求打满,CPU 和数据库连接池瞬间见顶,正常用户反而进不来了。很多时候是爬虫、压测脚本或者恶意刷请求在作祟。对付这类突发流量,最省事的一道防线就是 Nginx 的 limit_req。

limit_req 的思路很简单:给同一来源的请求设一个速率上限,多余的请求排队等待或直接拒绝。配置只需两步,先在 http 块里定义共享内存和速率:

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

意思是按客户端 IP 统计,每秒最多接受 10 个请求。再在需要保护的 location 里引用它:

limit_req zone=one burst=20 nodelay;

burst=20 允许短时多出 20 个请求排队,nodelay 让它们不用等待直接放行。超过的部分,Nginx 默认返回 503。

用的时候有三点要注意。第一,限流粒度结合业务选:登录、短信验证码这类接口建议单独设更严格的速率。第二,burst 不是越大越好,排队请求占用连接,太大等于没限。第三,上线前先用 ab 或 wrk 压测验证,确认正常请求不受影响再逐步放开。

限流不是银弹,大规模攻击还需要 WAF、IP 黑名单配合。但对单机或中小规模服务,几行 limit_req 配置就能把“一波流量冲垮服务”变成“平稳削峰”,性价比极高。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。