Nginx 限流与防刷入门:limit_req 让服务扛住突发流量
【摘要】 用 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)