在http块中设置limit_rate可对所有响应全局限速,每个连接独立生效;配合limit_rate_after可实现首段不限速、后续限速,兼顾首屏加载与带宽保护。

直接在 http 块中设置 limit_rate,就能对所有响应生效——每个连接独立受限,不依赖 IP 或用户身份,也不需要共享内存。
最简方式:全局默认限速
编辑 /etc/nginx/nginx.conf,在 http { } 区域内添加:
-
limit_rate 512k;—— 所有响应(HTML、JS、图片、大文件)都按 512 KB/s 发送 - 单位支持
k(KB/s)、m(MB/s),如1m表示 1 MB/s - 该值作用于每个 TCP 连接,不是整机总带宽;两个并发下载就占用约 1 MB/s 出口带宽
更实用的组合:跳过首段再限速
避免小资源(图标、CSS)被拖慢,用 limit_rate_after 配合使用:
-
limit_rate_after 1m;—— 前 1 MB 数据不限速,快速加载首屏或文件头 -
limit_rate 256k;—— 超过 1 MB 后,以 256 KB/s 持续发送 - 这对 ZIP、MP4、PDF 等大文件很友好,兼顾首段体验和长期带宽保护
注意范围与生效逻辑
limit_rate 是响应阶段指令,只控制 Nginx 往客户端“发数据”的速度:
- 不影响后端处理耗时(如 PHP 执行、数据库查询)
- 若启用
gzip,限速对象是压缩后的字节数(即实际网络发送量) - 与
sendfile on共存时,在某些 Linux 内核下可能首包略快,建议搭配tcp_nodelay on; - 它和
limit_conn(控并发)、limit_req(控频次)机制不同,可叠加使用但不可替代
验证是否生效
用 curl 测试下载速度即可确认:
curl -o /dev/null -s -w '%{speed_download}\n' http://your.site/bigfile.zip- 多次运行观察输出值是否稳定在设定速率附近(允许小幅波动)
- 注意:响应头中不会体现限速信息,必须靠实测











