Nginx限速配置详解
在 Nginx 日常运维与调优中,流量控制 是一个重要话题,尤其在 CDN、下载站、镜像源、私有 Harbor 镜像库等场景里尤为重要。今天我们来详细讲讲两个控制带宽和缓存行为的指令:
limit_rate
proxy_buffering
一、limit_rate
—— 单连接限速
1. 指令格式
limit_rate 1m; # 每秒限制1MB下载速度
2. 作用
limit_rate
用于限制单个连接的传输速率。设置该值后,Nginx 向客户端发送响应数据的速度不会超过设定值。
单位支持:
b
(字节)k
(KB)m
(MB)
示例:
location /download/ {limit_rate 500k; # 限制每个连接最多500KB/s
}
这样客户端即使网速再快,最多也只能以500KB/s的速度下载资源。
3. 特点
特点 | 说明 |
---|---|
作用范围 | 每个客户端连接 |
配置位置 | http / server / location 均可 |
不区分 IP、UA 等 | 纯粹按 TCP 连接限速 |
影响静态文件、代理内容 | 全部支持 |
4. 注意点
- 是“每个连接”的限制,而非整个服务的总带宽;
- 多线程/多连接下载工具可绕过单连接限制(如迅雷、aria2);
- 可结合
limit_conn
指令实现“限速+连接数”双重限制。
二、proxy_buffering on;
—— 代理缓存缓冲控制
1. 指令格式
proxy_buffering on;
2. 作用
控制 Nginx 是否在代理响应时启用缓冲机制。
on
(默认):Nginx 会将后端返回的数据缓存到本地缓冲区,缓存完后再统一发送给客户端。off
:Nginx 不进行缓存,收到后直接传给客户端(实时传输,类似“流式”)。
示例:
location /api/ {proxy_pass http://backend;proxy_buffering off; # 后端返回的内容实时传输,不缓存
}
3. 开启 proxy_buffering
的好处
- 避免后端被大量慢连接拖死;
- 支持缓存、压缩;
- 适合大文件下载场景。
4. 关闭 proxy_buffering
适合场景
- WebSocket;
- SSE (Server-Sent Events);
- 后端为流媒体、直播时。
5. 与 limit_rate
结合效果
当开启 proxy_buffering on
时,Nginx 会“预取”后端全部响应到内存或临时文件,之后再按 limit_rate
设定慢慢地、稳定地发送给客户端——这可以有效防止后端被慢连接影响。
经典配置组合:
location /download/ {proxy_pass http://backend;proxy_buffering on;limit_rate 1m;
}
这样,即使用户下载很慢,Nginx 也能先从后端拿完数据(不阻塞后端),自己慢慢发。
三、实战案例:限制 Harbor 镜像拉取速度
location /v2/ {proxy_pass http://harbor_backend;proxy_buffering on; # 防止慢拉镜像影响 Harbor 后端limit_rate 2m; # 限制单个连接2MB/s下载limit_conn zone=perip 5; # 每个IP最大5个并发连接
}
这样 Harbor 镜像库能做到:
- 单个连接最大 2MB/s;
- 同一 IP 不能开超过5个拉取连接;
- 后端 Harbor 不受慢客户端影响。
四、总结
指令 | 作用 | 影响对象 | 是否建议开启 |
---|---|---|---|
limit_rate | 限制单连接下载速率 | 客户端连接 | 建议开启,防止带宽抢占 |
proxy_buffering | 控制代理缓存行为 | Nginx与后端 | 建议开启,保护后端,除非做实时流 |
五、最佳实践建议
场景 | 推荐配置 |
---|---|
Harbor 镜像库 | proxy_buffering on; limit_rate 2m; limit_conn 组合 |