location /downloads/ {
    limit_rate_after 10m;
    limit_rate 1m;
}

给下载配了限速,实测速度还是 80MB/s,配置里 limit_rate 写在 limit_rate_after 前面,改顺序后依然不限速,日志没有报错。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:limit_rate 只对单个连接生效,浏览器多线程下载开了八个连接,总速度是单连接上限的八倍。配置块还被上层 location 的规则覆盖了。

围绕「Nginx 下载限速」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。监控和日志的时间要对上,时区不一致会多绕很大一圈。

临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

处理上按这个顺序:确认限速规则落在最终匹配的 location 里,用 nginx -T 看生效配置;按连接数估算总带宽,必要时在出口做整体限速;用单线程和多线程各下载一次,对比实际速度。

确认没问题再收工,单连接下载速度稳定在 1MB/s,多线程总速度不超过设定上限。

作者 9823189