最近发现我们服务器的带宽经常会跑满,这样导致正常业务会收到影响。所以出于降低带宽峰值的原因,我开始研究nginx怎么限速的问题。

Nginx如何限制文件的下载速度,怎么限速?

限制速度的方案,限制链接数和每个链接的速度

根据服务器业务的实际情况,有些可能不能设置链接数限制。我们这个服务都可以,所以下面的规则我设置的就比较严格。

第一步:在http块中添加类似下面的两个参数

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
#每秒处理10个请求,请求限制相关的实例名one
limit_conn_zone $binary_remote_addr zone=addr:10m;
# 连接数限制相关的实例名是addr

在http中添加的都像是实例化一个nginx对象,并给nginx对象赋初值。

第二步:在server块中添加实际限制数值

limit_conn addr 1;
# 连接数限制是1,这个根据实际情况设置
limit_rate 50k;
# 单个连接数的下载带宽控制在50KB/s
limit_req zone=one burst=5 nodelay;
# 请求连接队列中最多有5个待处理请求,多余请求直接返回503 

Nginx如何限制文件的下载速度,怎么限速?

设置完成后记得运行nginx -s reload重新载入

第三步:测试下载速度限制效果

通过浏览器下载,发现速度被限制在50KB/s,实现目标。

Nginx如何限制文件的下载速度,怎么限速?

另外有几个情况说明

  • 要想实现限速,还是我之前说的,单个连接带宽限制是必须的。
  • 在生产环境中,建议不要使用连接数限制
  • 单个连接的带宽限制不易过低
  • 像迅雷这种下载器的限速,可能需要别的办法

限制用了一段时间发现没什么问题,带宽峰值也基本不会跑满了。最后总之需要根据自己实际情况来设置,不要因为这个影响业务,希望这篇文章对你有用。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。