nginx层精准限流是最高效前置防护手段:①按接口路径差异化配置limit_req_zone与location绑定;②优先用api key或jwt解析用户id限流,兜底ip+ua组合;③合理设置burst(rate的2–5倍)与nodelay(安全接口去nodelay,查询类加nodelay);④返回标准429响应并联动健康检查动态降权。

直接在 Nginx 层做精准限流,是最高效、最前置的 API 过度调用防护手段。它不依赖后端应用逻辑,能在请求到达业务代码前就拦截或缓冲异常流量,避免服务器资源被耗尽。
按接口路径差异化限流
不同 API 的敏感度和处理成本差异很大,不能一刀切。比如登录接口要防暴力破解,报表导出接口可容忍短时高峰但需控总量。
- 为每个关键路径单独定义限流区域,例如:
- limit_req_zone $http_x_api_key zone=login_limit:10m rate=3r/s;
- limit_req_zone $http_x_api_key zone=export_limit:10m rate=1r/m;
- 在对应 location 中绑定策略:
- location /api/v1/login { limit_req zone=login_limit burst=5; proxy_pass http://auth; }
- location /api/v1/export { limit_req zone=export_limit burst=2; proxy_pass http://data; }
按真实调用者身份限流,不只看 IP
用 $binary_remote_addr 按 IP 限流在 NAT 或 CDN 环境下容易误伤。应优先使用 API Key、JWT 用户 ID 或 client_id 作为限流 key。
- 提取 token 中的用户标识(可用 lua-resty-jwt 解析并 set 到变量)
- 若无有效凭证,可 fallback 到 IP + User-Agent 组合,增强区分度
- 保留一层宽松的 IP 限流(如 100r/m)作为兜底,防御无头爬虫扫描
合理配置 burst 和 nodelay 参数
burst 是“缓冲池”,nodelay 决定是否立刻放行缓冲池里的请求——这对用户体验和系统保护很关键。
- burst 值建议设为 rate 的 2–5 倍,例如 rate=5r/s 时 burst=15~25
- 对登录、短信等强安全接口,去掉 nodelay,让超限请求排队等待,避免瞬间冲击
- 对读取类接口(如列表查询),可加 nodelay,提升突发响应速度
- 所有超出限制的请求统一返回标准 429 Too Many Requests,并带 Retry-After 头
联动后端健康状态,动态调整转发
限流不是孤立动作。当前端节点响应变慢或错误率升高时,Nginx 应主动减少向其分发请求。
- 在 upstream 中启用主动健康检查:
check interval=3 rise=2 fall=5 timeout=1; - 配置
proxy_next_upstream error timeout http_500 http_502 http_503 http_504; - 进阶可结合 Lua 脚本读取 Prometheus RT 指标,自动降权高延迟节点
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











