专栏首页运维录如何限制 Nginx下载速率?

如何限制 Nginx下载速率?

默认情况下你的服务器有多少网络带宽(上行),Nginx就能消耗掉多少,来者不拒。

假设你的服务商为你的服务器提供 10Mbit/s上下行对等的网络带宽,你希望通过HTTP方式从你的VPS服务器下载2GB的备份文件。

那么你会得到大约 1.25MB/s左右的下载速度(1Byte等于8Bit),这个下载速度确实很爽。

但是这带来了另外一个问题,由于你下载文件占用了VPS服务器全部网络带宽,那么其他用户将无法访问你的服务器,或者访问速度非常缓慢。

你可以把上面的场景替换到公司某些业务上,这样的结果是我们不能接受的,所以需要一种机制,它能够限制每个HTTP连接所使用的最大速率(带宽)。例如将示例中最大下载速度限制在 512KB/s

操作步骤


1. nginx配置文件

cat /etc/nginx/conf.d/default.conf

server {

    #..其它配置项目省略

    location /download {
        limit_rate 512k;
    }

    #..其它配置项目省略
}

还可以再优化一下,例如 前10MB 不限速,超过则开始限速。

server {

    #..其它配置项目省略
    
    location /download {
             limit_rate_after 10240K;
        limit_rate 512k;
    }
}

2. 重启 nginx

nginx -t && nginx reload

3. 验证

最大下载速度限制在 512KB/s 以内。

限速相关指令


1. limit_rate 指令

语法: limit_rate rate;
默认值: limit_rate 0;
使用字段: http, server, location, if in location
功能: 该指令用于限制向客户端传输数据的速度,单位是Byte/s每秒传输的字节数,设置0禁用限制功能。

2. limit_rate_after 指令

语法: limit_rate_after size;
默认值: limit_rate_after 0;
使用字段: http, server, location, if in location
功能: 该指令用于设置一个阀值,当达到条件(字节)后开始限速。

注意事项


需要注意的是,上面的限制指令只是针对一个连接的设定,如果客户端使用两个连接(并发),那么总速率将会是该指令设置值的两倍。

不过nginx 提供了一个另外一个模块 ngx_http_limit_conn_module 用于限制连接数。

参考文档

http://nginx.org/en/docs/http/ngx_http_core_module.html

http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

小结


最后来总结下文章中的知识点

  • limit_rate 指令用于配置限速功能,单位Byte/s
  • 配合 limit_rate_after指令,可以在触发规则后启用限速功能。
  • 限速功能只能限制单个HTTP连接,可以配合限制连接数模块使用。

本文分享自微信公众号 - 运维录(gh_70d95b8f5f7c),作者:东南

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何自定义 Nginx日志?

    为什么要自定义nginx日志? 这里有个例子。示例中希望 nginx 能够记录 php-fpm (上游服务器)执行程序所花费的时间,以便为优化服务器端(程序)响...

    用户1560186
  • 如何为 Nginx 添加一个模块?

    这篇文章发布于2013年,介绍如何为nginx添加模块,由于时间久远可能有些内容已经过时,不过"静态添加模块"方法仍然可以使用(从1.9.11版本开始支持loa...

    用户1560186
  • Nginx Location

    不知不觉 nginx主题的文章写了60+篇,有最早的也有最近的,有些是记录安装配置,有些是记录问题解决方法,内容质量有深也有浅参差不齐,随着技术迭代有些文章已经...

    用户1560186
  • nginx限速,带宽,IP;

    限制向客户端传送响应数据的速度,可以用来限制客户端的下载速度。参数rate的单位是字节/秒,0为关闭限速。

    拓荒者
  • Python | Python学习之Redis交互详解

    最近在学习scrapy redis,顺便复习了redis。 本篇为redis篇,包含实例演示,主从服务配置,python交互等内容。

    咸鱼学Python
  • 成员网研会:如何使用服务网格保护和监控外部服务访问(视频+PDF)

    保护微服务的关键操作挑战之一,是理解、保护和监视对外部服务的访问。像Istio这样的服务网格,可以使组织将这个关键的功能,从应用程序转移到基础设施,从而将开发人...

    CNCF
  • 你知道 JavaScript 有 535 种方法刷新页面吗?

    FairyEver
  • 手把手教你如何分析 iOS 系统栈 crash

    先上栈,这个 crash 是我们目前开发产品的 top5 crash ? 第一步 对于死在 ojbc _ msgSend 的函数(不仅仅是 msgSend, o...

    腾讯Bugly
  • 干货|互联网运营数据分析必须掌握的十个经典方法

    用户1756920
  • 干货|互联网运营数据分析必须掌握的十个经典方法

    ? 眼花缭乱的东西很多,真正派上用场的,却不见得是那些看起来炫酷的。很多方法朴实无华,却解决大量的问题。 下面十个方法都是我这么多年做互联网运营分析时一定会用...

    灯塔大数据

扫码关注云+社区

领取腾讯云代金券