nginx中limit_rate控制单连接响应传输速率(如下载限速),limit_req限制请求处理频率(如防刷);前者单位字节/秒、支持limit_rate_after,后者需先定义zone再启用、支持burst/nodelay。

在 Nginx 中限制传输速率,主要通过 limit_rate 指令(控制单个连接的响应输出速度)和 limit_req 模块(限制请求处理频率)来实现。两者用途不同:前者管“下载多快”,后者管“请求多频繁”。下面分场景说明常用写法。
限制单个连接的响应传输速率(如文件下载限速)
适用于防止大文件下载占满带宽,用 limit_rate 指令,单位是字节/秒(支持 k、m 后缀):
- 放在
location、server或http块中均可 - 值为
0表示关闭限速;设为1m表示限制为 1MB/s - 可配合
limit_rate_after实现“前 N 字节不限速,之后再限”
示例:
location /downloads/ {limit_rate 512k;
limit_rate_after 10m;
}
表示:前 10MB 不限速,之后限制为 512KB/s。
限制客户端请求处理速率(防刷、控频)
需先定义限流区域(limit_req_zone),再在具体位置启用(limit_req):
-
$binary_remote_addr是常用键,按客户端 IP 统计 -
rate=5r/s表示每秒最多处理 5 个请求 -
burst允许突发请求暂存(排队),nodelay表示不延迟立即处理(超限直接 503)
示例:
http {limit_req_zone $binary_remote_addr zone=api:10m rate=5r/s;
server {
location /api/ {
limit_req zone=api burst=10 nodelay;
}
}
}
含义:每个 IP 共享一个 10MB 的限流内存区,基础速率 5r/s,允许最多 10 个请求排队,且不延迟执行(超限即拒)。
组合使用:既控请求数,又控响应速度
例如对上传接口限频、对下载接口限速,可分别配置:
location /upload/ {limit_req zone=upload burst=3;
# 其他上传相关配置
}
location /static/ {
limit_rate 256k;
# 静态资源服务配置
}
注意:limit_req 和 limit_rate 可共存于同一 location,互不影响。
调试与验证小提示
限速生效后可通过 curl 观察响应头或下载耗时验证:
- 加
-v查看 HTTP 头,确认是否返回 503(限流触发) - 用
curl -o /dev/null -s -w '%{speed_download}\n' URL看实际下载速度 - 检查 Nginx 错误日志(
error_log)是否有limiting requests记录











