nginx中limit_rate用于限制单个连接响应体发送速率,支持按路径、文件类型、参数或ip动态限速,并可结合limit_rate_after实现“先快后慢”优化体验。

在 Nginx 静态资源服务中,limit_rate 是专用于控制单个连接响应体发送速率的指令,它不干预请求处理或上游通信,只限制“发给客户端的数据流速度”,适合保护带宽、防止单个大文件下载长期占满出口。
按路径统一限速
最常用方式是在匹配静态资源路径的 location 块中直接设置固定速率:
- 用
^~前缀确保前缀匹配优先(比正则更高效):location ^~ /download/ { limit_rate 512k; } -
alias或root需正常配置,限速与文件读取无关,只作用于发送阶段 - 单位支持
k(KB/s)、m(MB/s),如1m= 1048576 字节/秒;写0表示不限速
按文件类型差异化限速
用正则匹配后缀,对不同资源设不同速率,兼顾体验与带宽保护:
- 压缩包类(体积大、易拖库):
location ~ \.(zip|rar|iso|exe)$ { limit_rate 256k; } - 文档类(小而高频):
location ~ \.(pdf|txt|epub)$ { limit_rate 1m; } - 视频类(需流畅播放):可结合
limit_rate_after避免开头卡顿
动态控制速率(白名单/参数驱动)
避免硬编码,用 map 指令实现条件化限速,安全且可维护:
- 根据 URL 参数提速(如
?speed=fast): http { map $arg_speed $limit_rate_val { default "512k"; "fast" "2m"; } } 然后在 location 中写limit_rate $limit_rate_val; - 按 IP 白名单不限速: map $remote_addr $limit_rate_val { default "300k"; "192.168.1.100" ""; "2001:db8::1" ""; } 空字符串表示不限速
提升体验:先快后慢(limit_rate_after)
单纯限速会让用户感觉“从头就慢”,尤其对预览型文件不友好。配合 limit_rate_after 可优化首段体验:
- 前 5MB 不限速,之后限 300KB/s:
limit_rate_after 5m; limit_rate 300k; - 该指令必须与
limit_rate同时存在才生效 - 适用于 MP4、PDF 等支持范围请求(Range)的资源,浏览器能快速加载开头











