nginx中对视频资源限速需结合location匹配后缀、limit_rate与limit_rate_after实现“先快后慢”、limit_conn_zone限制单ip并发连接,并通过map指令支持分级限速和会员差异化策略。

在 Nginx 中对视频资源实施带宽限制和单连接限速,核心是利用 limit_rate、limit_rate_after 和 limit_conn 等指令,结合 location 匹配与变量控制,实现精细化的流量管理。关键不在于全局限速,而在于按资源类型、用户行为或连接维度动态调控。
针对视频文件(如 mp4、m3u8、ts)单独限速
通过 location 块精准匹配视频后缀,避免影响其他静态资源:
- 使用正则 location 匹配常见视频格式:
location ~* \.(mp4|mov|avi|mkv|webm|mp3|ogg|flv|m3u8|ts)$ { ... } - 设置基础限速:例如
limit_rate 512k;表示每个连接最大下载速度为 512 KB/s - 启用“先快后慢”策略:搭配
limit_rate_after 10m;,即前 10MB 不限速,后续限速,提升首屏加载体验 - 注意单位:Nginx 中
k表示 KiB(1024 字节),m表示 MiB(1024×1024 字节)
限制单个 IP 的并发视频连接数
防止一个客户端开启多个连接刷带宽(如多标签页、下载工具),需配合 limit_conn_zone:
- 在 http 块中定义共享内存区:
limit_conn_zone $binary_remote_addr zone=video_conn:10m; - 在 video location 中启用限制:
limit_conn video_conn 3;表示单个 IP 最多 3 个并发视频连接 - 可选增强:用
$uri或$args组合键,区分不同视频流(如 HLS 的不同分辨率分片) - 配合
limit_conn_status 429;返回标准限速状态码,便于前端感知
区分内网/外网或登录用户做差异化限速
借助 map 指令或 if 判断,实现策略分级:
- 用 map 定义速率变量:
map $remote_addr $limit_rate_value { default 256k; 192.168.0.0/16 2m; } - 在 location 中引用:
limit_rate $limit_rate_value; - 若已集成鉴权(如 JWT 或 cookie),可通过 $cookie_x_token 判断是否为会员,设为 0(不限速)或更高值
- 注意:不要在 if 块中直接写 limit_rate,Nginx 不支持;必须用 map + 变量方式间接控制
验证与调试要点
限速策略上线后需实测效果,避免配置错误导致服务异常:
- 用 curl 分段请求验证限速:
curl -r 0-1048575 http://site.com/video.mp4 --limit-rate 100K对比服务端响应速度 - 查看 Nginx 日志中的
$bytes_sent和$request_time,估算实际传输速率 - 检查 error.log 是否出现
limiting connections by zone或limiting rate提示 - HLS 场景下注意 ts 分片小、请求频次高,建议适当调高
limit_conn阈值或改用更细粒度 key(如$host:$uri)










