nginx 可通过 limit_rate 指令在 location 块中对 .zip、.iso 等后缀文件响应限速,单连接生效,支持正则匹配与动态变量;设为 0 表示不限速,可配合 limit_rate_after 实现分段限速。

在 Nginx 中,可以通过 limit_rate 指令配合 location 块,对匹配特定文件(如 .zip、.iso、.pdf 等)的响应限速下载。该配置作用于响应阶段,对每个连接单独生效,不依赖模块扩展,原生支持。
匹配特定后缀文件并限速
在 server 或 http 块中添加带正则或前缀匹配的 location,再设置 limit_rate:
- 使用
~ \.(zip|iso|rar|tar\.gz)$匹配大小写敏感的后缀 - 用
limit_rate 512k;限制单连接下载速度为 512 KB/s(单位可为k、m或字节数) - 限速值设为
0表示禁用限速(即恢复不限速)
示例配置:
location ~ \.(zip|iso|rar|tar\.gz|pdf|mp4)$ {
limit_rate 256k;
}
按用户角色或条件动态限速
若需更精细控制(如对未登录用户限速、VIP 用户不限速),可结合 map 指令预定义速率变量:
- 在
http块顶部定义map,根据请求头、cookie 或 IP 判断速率 - 例如:检测 cookie 中是否有
user_type=vip,有则设为 0(不限速),否则设为 128k - 在
location中引用该变量:limit_rate $limit_rate_value;
避免影响静态资源缓存与并发
limit_rate 不影响缓存行为,但要注意:
- 它作用于每个 TCP 连接,多个并发下载会各自受限,总带宽 = 单连接速率 × 并发数
- 不要在启用
sendfile on的高负载场景下对大文件粗暴限速,可能增加内核拷贝开销;可搭配limit_rate_after 10m;实现“前 10MB 不限速,之后限速” - 确保目标文件路径真实存在且 Nginx 有读取权限,否则限速无效(返回 403/404 时
limit_rate不触发)
验证与调试技巧
修改配置后需重载生效:nginx -t && nginx -s reload。验证方式包括:
- 用
wget --limit-rate=0或curl -L下载目标文件,观察实际速率(注意关闭客户端限速) - 检查响应头是否含
X-Accel-Limit-Rate(仅当开启proxy_buffering off且代理场景下可能暴露) - 通过
nginx -T输出完整生效配置,确认limit_rate确实落在目标location内











