nginx api防刷限流需按路径精准绑定策略:先在http块定义多级限流区(如login_limit、export_limit),再在对应location中启用limit_req并设置burst;配合limit_conn控并发,统一返回429状态码并记录日志。

在 Nginx 中用 location 配置 API 防刷限流,核心是“按路径精准绑定限流策略”,不是全局一刀切。关键在于两步:先在 http 块定义限流区(区分不同接口),再在对应 location 块中启用并调优参数。
按接口路径单独定义限流区
不同 API 的风险和处理成本差异大,必须分开配置。比如登录接口防暴力破解,导出接口控总量,设备查询接口防高频轮询:
-
limit_req_zone $http_x_api_key zone=login_limit:5m rate=3r/s;—— 按 API Key 限流,更精准(比 IP 更可靠) -
limit_req_zone $http_x_api_key zone=export_limit:5m rate=1r/m;—— 导出类接口用r/m单位,防短时刷量 -
limit_req_zone $binary_remote_addr zone=device_limit:10m rate=20r/m;—— 设备状态查询按 IP 限流,单位用分钟更合理
在 location 块中绑定并启用策略
每个 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; }location /api/v1/device/status { limit_req zone=device_limit burst=10 nodelay; proxy_pass http://iot; }
burst 值建议设为 rate 的 2–5 倍:比如 rate=3r/s,burst=5;rate=1r/m,burst=2。既允许合理突发,又不放行恶意扫荡。
组合连接数限制,堵住并发攻击
仅控频率不够,还要防单 IP 开几十个长连接打满后端。搭配 limit_conn:
- 先定义连接限流区:
limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m; - 在关键 location 中加:
limit_conn conn_per_ip 8;—— 每个 IP 最多 8 个并发连接
注意:limit_req 管“每秒几次”,limit_conn 管“同时几个连接”,两者逻辑不同、必须配合。
返回友好错误与日志可查
限流触发时别返回默认 503,改用标准 HTTP 状态码便于前端识别和监控:
- 全局加:
limit_req_status 429;(放在 http 块) - 可选加响应头:
add_header X-RateLimit-Limit "10"; add_header X-RateLimit-Remaining "0"; - 确保 access_log 记录状态码:
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent';
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











