当前位置: 首页 > web >正文

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 组合
http://www.xdnf.cn/news/14406.html

相关文章:

  • LeetCode 高频 SQL 50 题(基础版)【题解】合集
  • 高效开发REST API:Django REST Framework序列化器深度指南
  • 搭建K8s集群平台(详细版)
  • SQL Server 2025 预览版发布:AI深度集成、开发者体验飞跃与混合云新篇章
  • Java对象中的MarkWord
  • 【大厂机试题解法笔记】字符串加密
  • java 设计模式_行为型_18解释器模式
  • 【MySQL】TencentOS 安装登录MySQL
  • 【Flutter】解决小米澎湃系统迷你窗口、缩小窗口后界面空白问题
  • 电阻篇---常见作用
  • Rviz2中,在rviz和launch文件中都需要配置urdf文件,二者作用上的区别?
  • hot100 -- 13.堆系列
  • MongoDB使用安全的sha256认证
  • 【Elasticsearch】文档(二):更新
  • FPGA中的DMA技术
  • 制作微PE U盘后电脑多出300M盘符(EFI分区)无法隐藏的解决过程
  • Vue3 Pinia Store 生命周期管理
  • 前端开发面试题总结-vue2框架篇(二)
  • 国产替代新标杆|盟接之桥EDI软件让中国制造连接世界更安全、更简单、更有底气
  • AI for Science:智能科技如何重塑科学研究
  • 机器能做科学家吗?一场关于开放式科研的 AI 革命
  • 人工智能嵌入公共服务治理的风险挑战(三)
  • day31 文件的规范拆分和写法
  • 多线程与多进程技术全景对比
  • 平均数与倍数
  • 地理空间视角下的 SIR 传染病模型模拟与可视化
  • ObservedV2装饰器和Trace装饰器
  • 浏览器拨打电话 nginx代理wss (mod_cti基于FreeSWITCH)
  • 山东大学软件学院创新项目实训开发日志——第十六周
  • 【Python打卡Day40】训练与测试的规范写法 @浙大疏锦行