服务器之家:专注于服务器技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟服务器|服务器安全|DNS服务器|服务器知识|

服务器之家 - 服务器技术 - 服务器知识 - 详解Nginx限流配置

详解Nginx限流配置

2019-09-16 17:32程序员赵鑫 服务器知识

本文以示例的形式,由浅入深讲解Nginx限流相关配置,是对简略的官方文档的积极补充,感兴趣的朋友跟随小编一起看看吧

本文以示例的形式,由浅入深讲解Nginx限流相关配置,是对简略的官方文档的积极补充。

Nginx限流使用的是leaky bucket算法,如对算法感兴趣,可移步维基百科先行阅读。不过不了解此算法,不影响阅读本文。

空桶

我们从最简单的限流配置开始:

limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s;

server {
  location /login/ {
    limit_req zone=ip_limit;
    proxy_pass http://login_upstream;
  }
}
  • $binary_remote_addr 针对客户端ip限流;
  • zone=ip_limit:10m 限流规则名称为ip_limit,允许使用10MB的内存空间来记录ip对应的限流状态;
  • rate=10r/s 限流速度为每秒10次请求
  • location /login/ 对登录进行限流

限流速度为每秒10次请求,如果有10次请求同时到达一个空闲的nginx,他们都能得到执行吗?

详解Nginx限流配置

漏桶漏出请求是匀速的。10r/s是怎样匀速的呢?每100ms漏出一个请求。

在这样的配置下,桶是空的,所有不能实时漏出的请求,都会被拒绝掉。

所以如果10次请求同时到达,那么只有一个请求能够得到执行,其它的,都会被拒绝。

这不太友好,大部分业务场景下我们希望这10个请求都能得到执行。

Burst

我们把配置改一下,解决上一节的问题

limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s;

server {
  location /login/ {
    limit_req zone=ip_limit burst=12;
    proxy_pass http://login_upstream;
  }
}

burst=12 漏桶的大小设置为12

详解Nginx限流配置

逻辑上叫漏桶,实现起来是FIFO队列,把得不到执行的请求暂时缓存起来。

这样漏出的速度仍然是100ms一个请求,但并发而来,暂时得不到执行的请求,可以先缓存起来。只有当队列满了的时候,才会拒绝接受新请求。

这样漏桶在限流的同时,也起到了削峰填谷的作用。

在这样的配置下,如果有10次请求同时到达,它们会依次执行,每100ms执行1个。

虽然得到执行了,但因为排队执行,延迟大大增加,在很多场景下仍然是不能接受的。

NoDelay

继续修改配置,解决Delay太久导致延迟增加的问题

limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s;

server {
  location /login/ {
    limit_req zone=ip_limit burst=12 nodelay;
    proxy_pass http://login_upstream;
  }
}

nodelay 把开始执行请求的时间提前,以前是delay到从桶里漏出来才执行,现在不delay了,只要入桶就开始执行

详解Nginx限流配置

要么立刻执行,要么被拒绝,请求不会因为限流而增加延迟了。

因为请求从桶里漏出来还是匀速的,桶的空间又是固定的,最终平均下来,还是每秒执行了5次请求,限流的目的还是达到了。

但这样也有缺点,限流是限了,但是限得不那么匀速。以上面的配置举例,如果有12个请求同时到达,那么这12个请求都能够立刻执行,然后后面的请求只能匀速进桶,100ms执行1个。如果有一段时间没有请求,桶空了,那么又可能出现并发的12个请求一起执行。

大部分情况下,这种限流不匀速,不算是大问题。不过nginx也提供了一个参数才控制并发执行也就是nodelay的请求的数量。

limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s;

server {
  location /login/ {
    limit_req zone=ip_limit burst=12 delay=4;
    proxy_pass http://login_upstream;
  }
}

delay=4 从桶内第5个请求开始delay

详解Nginx限流配置

这样通过控制delay参数的值,可以调整允许并发执行的请求的数量,使得请求变的均匀起来,在有些耗资源的服务上控制这个数量,还是有必要的。

Reference

http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
https://www.nginx.com/blog/rate-limiting-nginx/

总结

以上所述是小编给大家介绍的Nginx限流配置,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

延伸 · 阅读

精彩推荐
  • 服务器知识服务器常用存储设备优缺点辨析

    服务器常用存储设备优缺点辨析

    用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也完全与普通硬盘一致。...

    HOSTSPACE2042019-08-07
  • 服务器知识42U标准机柜尺寸是多少?42U机柜尺寸

    42U标准机柜尺寸是多少?42U机柜尺寸

    经常有客户询问我们42U标准机柜尺寸是多少?42U机柜尺寸多少?这些一直都是有机柜租用需求的用户比较关心和关注的问题,今天小编就给大家解答一下。 首先42U标准机柜尺寸就是指容量为42U的机柜尺寸,时常有客户上来就问42U机柜多...

    网络3942019-06-19
  • 服务器知识出现RPC服务器不可用的解决方法

    出现RPC服务器不可用的解决方法

    出现 RPC服务器 不可用 的解决方法 RPC服务器,是指Remote Procedure Call Protocol,中文释义为(RFC-1831)远程过程调用协议:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协...

    互联网2302019-05-22
  • 服务器知识1张图看懂RAID功能,6张图教会配置服务器【转】

    1张图看懂RAID功能,6张图教会配置服务器【转】

    RAID 包含一组或者一个集合甚至一个阵列。使用一组磁盘结合驱动器组成 RAID 阵列或 RAID 集。将至少两个磁盘连接到一个 RAID 控制器,而成为一个逻辑卷,也可以将多个驱动器放在一个组中。一组磁盘只能使用一个 RAID 级别。使用...

    CSDN2122019-08-15
  • 服务器知识教你区分独立服务器与VPS主机的6种方法

    教你区分独立服务器与VPS主机的6种方法

    作为站长,虽然我们已经知道独立服务器和VPS主机是两种类型的主机,但如果服务商给你展示一个服务器的运营情况,或者购买的主机,如何知道是独立服务器还是VPS主机呢?其实很多网友都会有这样的疑虑,服务器提供商-BlueHos...

    互联网922019-05-19
  • 服务器知识台湾游戏服务器租用价格是多少

    台湾游戏服务器租用价格是多少

    目前最为热门的一个概念是VR,而和虚拟现实设备最为相关的一个东西就是游戏,目前为止网络游戏也越来越火,相对于服务器的需求量也逐渐变大,想要知道更多内容就可以看看这篇文章。...

    新网2882019-05-22
  • 服务器知识八款最佳的远程桌面连接工具推荐

    八款最佳的远程桌面连接工具推荐

    远程桌面是微软公司为了方便网络管理员管理维护服务器而推出的一项服务。从windows 2000 server版本开始引入,网络管理员使用远程桌面连接程序连接到网络任意一台开启了远程桌面控制功能的...

    CSDN3172019-06-01
  • 服务器知识绝地求生出现服务器繁忙servers are too busy的解决方法

    绝地求生出现服务器繁忙servers are too busy的解决方法

    吃鸡现在火的不得了,但是服务器有的时候会炸裂,但是有的时候,服务器可以登录,但是你上不去,提示servers are too busy,这种情况应该怎么办呢?今天,小白就给大家分享一篇经验,告诉大家如何去操作。 绝地求生出现服务器繁...

    百度经验3772019-06-05
北京塞车全天计划精准版