请求限速与并发控制是什么
限速是按维度给请求量设上限:某来源单位时间能发多少请求、某个接口同时允许多少并发。它的作用是防止单个来源或单个接口耗尽后端资源——一个爬虫、一段失控的脚本、一次批量导出都可能拖垮整个站点。限速与 WAF 规则的区别在于,它按「量」而不是按「内容」判断,因此对没有明显攻击特征的滥用量同样有效。参数设置的关键是区分接口成本:导出类接口的一次请求消耗远大于普通查询。
基本信息
| 限速维度 | 源 IP、URL 或接口、账号或令牌(可识别时) |
|---|---|
| 动作类型 | 限速、排队、拒绝请求 |
| 适用范围 | 公开接口、导出与报表接口、高成本查询、登录接口 |
| 参数要点 | 速率与突发额度(burst)需按业务峰值设置 |
| 配套措施 | 超限告警、来源定位与异常主机处置流程 |
典型使用场景
- 登录接口防爆破:限制单位时间尝试次数,配合失败锁定
- 数据导出接口保护:限制并发导出数,避免数据库被拖垮
- 搜索与查询接口:限制单来源请求速率,防止爬虫高频抓取
- 大促或活动期间:提前设定阈值,攻击时快速生效
- API 开放平台:按调用方设置配额,保证服务公平使用
- 异常用量定位:超限告警触发后找到对应主机或调用方
nginx 限速示例
nginx 限速示例
# 定义限速区:按客户端地址,10MB 共享内存,平均 10 请求每秒
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
# 定义并发连接数限制区
limit_conn_zone $binary_remote_addr zone=conn:10m;
server {
location /api/ {
limit_req zone=api burst=20 nodelay; # 允许突发 20 个请求
limit_conn conn 20; # 单来源最多 20 个并发连接
proxy_pass http://backend;
}
}参数与效果
| 参数 | 作用 | 设置不当的后果 |
|---|---|---|
| rate | 平均请求速率上限 | 过严限制正常用户,过松起不到保护作用 |
| burst | 允许的突发额度 | 过小会让突发正常流量被拒 |
| limit_conn | 单来源并发连接上限 | 过小影响页面并发加载 |
| 作用维度 | 按 IP 或按接口 | 全局限速未区分接口成本,高成本接口仍被打满 |
用户经代理或统一出口访问时,按源地址限速会连带影响同一出口的其他用户,这类场景应改用账号或令牌维度限速。
burst 参数设置过小会让突发正常流量被直接拒绝,表现为用户偶发访问失败且难以复现。