最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中如何通过配置进行 API 访问的流量控制
时间:2026-07-20 16:57:00 编辑:袖梨 来源:一聚教程网
Nginx通过limit_req和limit_conn模块实现API流量控制,先在http块定义限流区域(如zone=api_limit:10m rate=20r/s),再在location中启用limit_req(支持burst/nodelay)和limit_conn双策略,按IP或用户标识精细化限流。
在 Nginx 中实现 API 访问的流量控制,核心是用 limit_req 模块做请求速率限制,配合 limit_conn 控制并发连接数,再结合 IP 或用户标识做精细化管控。它不依赖后端,直接在入口层拦截或平滑异常流量,成本低、见效快。
定义限流区域(关键第一步)
限流状态需要共享存储,必须在 http 块中用 limit_req_zone 定义:
-
Key 选什么:常用
$binary_remote_addr(压缩后的客户端 IP),比$remote_addr更省内存;若需按用户限流,可用$cookie_uid或$arg_token提取认证标识 -
Zone 名称和大小:如
zone=api_limit:10m,10MB 内存约支持 16 万个独立 IP 的计数状态 -
rate 设置:例如
rate=20r/s表示每秒最多 20 个请求;也可写成rate=1200r/m(每分钟 1200 次),语义更直观
在 API 路径上启用限流
把限流策略绑定到具体 location,比如只对 /api/ 下的接口生效:
- 基础用法:
limit_req zone=api_limit;—— 超出速率的请求直接返回 503 - 允许突发流量:
limit_req zone=api_limit burst=30;—— 多余请求进入队列,按设定速率排队处理 - 立即响应突发:
limit_req zone=api_limit burst=30 nodelay;—— 队列里请求不排队,立刻转发(注意:瞬时峰值可能突破 rate)
叠加并发连接限制
仅控请求数还不够,恶意客户端可能建大量长连接耗尽资源。用 limit_conn 补齐:
- 先定义连接区:
limit_conn_zone $binary_remote_addr zone=conn_limit:1m; - 再应用:
limit_conn conn_limit 10;—— 单个 IP 最多保持 10 个并发连接 - 可与
limit_req共存,两者独立生效,形成“请求频次 + 连接数量”双保险
区分场景灵活配置
不同 API 敏感度不同,别一刀切:
- 登录接口易受暴力破解,建议严控:
rate=5r/m(每分钟 5 次)+burst=2 nodelay - 公开查询接口可宽松些:
rate=100r/m,加burst=20缓冲爬虫波动 - 付费用户或内部调用,可通过 header 或 token 提取标识,单独设 zone,避免影响普通用户
相关文章
- 原神少女哥伦比娅怎么配队 九套月反应体系全覆盖 07-21
- 全民K歌网页版登录入口-全民K歌网页版登录 07-21
- 玩具熊的五夜后宫4代噩梦奇卡Nightmare Chica介绍 07-21
- 漫蛙漫画APP下载免费-最新安卓版官方安装包获取 07-21
- picACG哔咔漫画-2025最新版手机下载 07-21
- 《掌握巫师2攻略技能,成为真正的魔法大师》 07-21