virtual host 中限速核心是 limit_rate 控制单连接下行速度,配合 limit_rate_after 跳过初始缓冲、limit_conn 限制同 ip 并发数,支持路径级精细化配置。

在 Virtual Host(server 块)中配置限速,核心是用 limit_rate 控制单连接下行速度,并配合 limit_rate_after 和 limit_conn 防止大文件被高频、多线程恶意下载。它不依赖共享内存 zone,也不影响请求频率或连接总数本身,而是直接约束每个 TCP 连接的数据发送节奏。
针对单虚拟主机启用基础下行限速
把 limit_rate 放在目标 server 块内,即可对该站点所有响应体(不含响应头)生效:
- 单位支持
k(KiB/s)、m(MiB/s)、b(字节/秒),例如limit_rate 200k表示每秒最多发 204,800 字节 - 值为
0表示显式关闭限速(不是“不限”,而是禁用该指令) - 该限制作用于每个连接,若用户开 5 个并发下载,总速可达 5 × 设置值
跳过初始缓冲提升用户体验
对大文件下载,可先放行前几 MB 加速加载,再启动限速,用 limit_rate_after 实现:
-
limit_rate_after 5m表示前 5 MiB 不限速,之后才按limit_rate执行 - 这个“首部”大小是累计响应体字节数,不是时间或分块数
- 适合镜像站、ISO 下载等场景,既防拖垮带宽,又避免首屏卡顿
限制同一 IP 的并发连接数
仅限速还不够——用户可用多线程工具绕过单连接限速。需搭配 limit_conn 控制并发:
- 先在
http块定义共享内存区域:limit_conn_zone $binary_remote_addr zone=perip:10m - 在
server或location中调用:limit_conn perip 2,表示每个 IP 最多 2 个并发连接 - 注意:该指令只限制新连接建立,已建立的连接不受影响
区分路径做精细化控制
不是所有路径都需要限速。比如静态资源要限,API 接口或管理后台则应放开:
- 在
location /download/块中设置limit_rate 100k; limit_rate_after 1m; - 在
location /api/块中写limit_rate 0;显式取消限速 - 继承规则按“就近原则”:子块会覆盖父块的
limit_rate,但不会影响limit_conn区域定义











