最有效的大文件限速方式是在匹配大文件的location块中直接配置limit_rate。推荐按目录(如location ^~ /download/)或文件类型(如location ~* .(zip|iso|mp4)$)精准限速,避免全局影响;需注意匹配优先级,确保限速规则位置靠前或使用^~、=明确抢占;搭配limit_rate_after(如5m)提升首段体验,且二者须同在location内、limit_rate_after在前;再叠加limit_conn(如perip 2)防多线程刷取;还可通过map实现白名单提速或url参数动态调速。

直接在匹配大文件的 location 块里配 limit_rate,是最有效、干扰最小的方式。它不作用于小资源(如 HTML、JS、CSS),只压住真正吃带宽的大文件连接,避免单个下载拖垮整站出口。
精准匹配目标路径或后缀
别用全局配置,而是聚焦高带宽资源:
- 按目录限速(推荐):用
^~前缀确保高效匹配,例如下载专区:location ^~ /download/ { limit_rate 512k; } - 按文件类型限速(更细粒度):匹配常见大文件后缀,区分对待:
location ~* \.(zip|iso|dmg|mp4|tar\.gz)$ { limit_rate 300k; } - 注意优先级:如果根路径
location /已存在且没加限速,它可能“兜底”掉所有请求——确保你的限速location在配置中位置靠前,或用=或^~明确抢占匹配权。
搭配 limit_rate_after 提升首段体验
纯限速会让用户感觉“从头就卡”。加 limit_rate_after 允许快速加载开头部分,既防刷又保体验:
-
limit_rate_after 5m;:前 5MB 不限速,适合快速显示进度条或预览头几秒视频 -
limit_rate 200k;:超过 5MB 后稳定压到 200KB/s(约 1.6Mbps) - 两者必须写在同一
location块内,且limit_rate_after必须在limit_rate之前生效
组合连接数限制防并发挤占
单靠限速挡不住多线程下载或脚本批量刷取。需叠加 limit_conn 控制并发连接数:
- 先在
http块顶部定义共享内存区:limit_conn_zone $binary_remote_addr zone=perip:10m; - 在对应
location中启用:limit_conn perip 2;(每个 IP 最多 2 个并发下载连接) - 若想更精细(比如防同一 URL 多次刷),可用
$binary_remote_addr$request_uri作为 key,避免 CDN 或 NAT 环境下误伤
动态差异化限速(可选增强)
需要白名单提速或参数控制时,用 map 指令安全实现:
- 对内网 IP 不限速:
map $remote_addr $dl_rate { default "300k"; "192.168.1.100" ""; }
然后在location中写limit_rate $dl_rate;(空字符串 = 不限速) - 允许用户通过 URL 参数临时提速:
map $arg_speed $rate { default "300k"; "fast" "1m"; }
访问/file.zip?speed=fast即走 1MB/s











