Nginx配置网站限速,限制单IP下载速度

网站下载速度太快会把带宽跑满,其他访客打开页面就变慢,甚至被机房限速。
用 Nginx 的限速指令,可以对单个 IP 的下载速度做上限控制,配置一次、重载即生效。
本文面向零基础用户,讲清楚 limit_ratelimit_conn 的用法,从确认模块到验证结果完整走一遍,照着做就能给静态文件下载限速。

先确认 Nginx 是否具备限速模块

限速依赖 ngx_http_limit_conn_module 和核心指令 limit_rate,绝大多数官方编译版本默认包含。
执行:

nginx -V 2>&1 | tr ' ' '\n' | grep -E 'limit_conn|limit_req'

能输出 --with-http_limit_conn_module 或没有 --without 排除项,就说明可用。
若完全没输出,说明是精简编译版本,需要重新编译或换用带该模块的包。

limit_rate 限制的是单个连接的下载速度,单位是字节/秒;limit_conn 限制单个 IP 的并发连接数;limit_req 限制请求频率。
三者配合才能既限速又防多线程拖满带宽。

配置单IP下载限速

编辑站点配置文件,路径通常在 /etc/nginx/conf.d//etc/nginx/sites-available/,宝塔面板则在「网站 → 设置 → 配置文件」中修改。

http 块中定义共享内存区(用于记录连接数):

http {
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn_log_level warn;
    # 其余已有配置保持不变
}

然后在 serverlocation 块中应用限速规则:

location /download/ {
    limit_rate 500k;          # 单连接下载速度上限 500KB/s
    limit_rate_after 1m;      # 前 1MB 不限速,保证小文件体验
    limit_conn perip 3;       # 单 IP 最多 3 个并发连接
    limit_conn_status 503;    # 超限返回 503
}

limit_rate_after 让用户在下载开头有一段全速体验,避免小文件被误伤。
如果只想对整个站点限速,把 limit_rate 放在 server 块即可。

改完后先检查语法再重载:

nginx -t && nginx -s reload

nginx -t 显示 syntax is oktest is successful 才算通过,否则按提示行号排查括号或分号。

验证限速是否真正生效

curl 下载一个大于 1MB 的文件,观察平均速度:

curl -o /dev/null -w '平均速度: %{speed_download} B/s\n' https://你的域名/download/test.zip

若配置为 500k,输出应稳定在约 500000 B/s 附近。
再用 ab 或浏览器多线程下载测试并发,超过 3 个连接时应看到部分请求返回 503,说明 limit_conn 生效。

判断限速是否合理的简单标准:静态大文件下载用 limit_rate 200k~1m 较常见;
API 或动态页面不建议限速,容易影响正常交互。

容易踩坑的几个点

限速只对单连接有效:用户用多线程下载工具开 10 个连接,每个连接都按 limit_rate 速度跑,总速度仍可能很大,所以必须搭配 limit_conn

limit_rate 单位写错:写成 500 是 500 字节/秒,慢到无法使用;
正确写法是 500k512000

共享内存区大小不足zone=perip:10m 约可记录 16 万个 IP,访问量大时要适当调大,否则会记录失败并放行。

重载不生效:确认修改的是实际加载的配置文件,可用 nginx -T | grep limit_rate 检查最终生效内容。

影响健康检查:如果后端有监控探针走同一域名,限速可能让探针超时,建议对探针 IP 单独放行。

关于限速的几个常见疑问

限制速度会影响正常用户访问页面吗?
只要把 limit_rate 限定在下载目录的 location 中,HTML、CSS、图片等页面资源不受影响,用户浏览体验基本无变化。

限速和限并发哪个更优先配?
建议先配 limit_conn 控制单 IP 连接数,再配 limit_rate 控制单连接带宽,两者叠加才能有效防止带宽被单用户占满。

CDN 场景下限速还准吗?
如果站点前面套了 CDN,Nginx 看到的是 CDN 节点 IP,$binary_remote_addr 不再代表真实用户,需要改用 X-Forwarded-For 配合 real_ip 模块才能按真实 IP 限速。

配置完成后建议用真实下载工具复测一次,不同网络环境速度会有波动,以多次测试的平均值为准。
遇到 503 增多时,优先检查 limit_conn 数值是否设得过小。

分享到:
上一篇
宝塔面板Nginx防盗链,保护图片资源
下一篇
Nginx屏蔽User-Agent
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意