• 售前

  • 售后

热门帖子
入门百科

一文搞懂Nginx限流(简单实现)

[复制链接]
崔炫俊献 显示全部楼层 发表于 2021-10-26 13:22:33 |阅读模式 打印 上一主题 下一主题
Nginx现在已经是最火的负载平衡之一,在流量陡增的互联网面前,接口限流也是很有必要的,尤其是针对高并发的场景。Nginx的限流重要是两种方式:限定访问频率和限定并发连接数。
限流(rate limiting)是NGINX浩繁特性中最有用的,也是经常容易被误解和错误设置的,特性之一。该特性可以限定某个用户在一个给定时间段内可以或许产生的HTTP哀求数。哀求可以简单到就是一个对于主页的GET哀求或者一个登岸表格的POST哀求。
限流也可以用于安全目标上,好比减慢暴力密码破解攻击。通过限定进来的哀求速率,而且(联合日记)标记出目标URLs来资助防范DDoS攻击。一样平常地说,限流是用在掩护上游应用服务器不被在同一时候的大量用户哀求湮没。
NGINX限流是怎样工作的

NGINX限流利用漏桶算法(leaky bucket algorithm),该算法广泛应用于通讯和基于包互换盘算机网络中,用来处置惩罚当带宽被限定时的突发情况。和一个从上面进水,从下面漏水的桶的原理很相似;如果进水的速率大于漏水的速率,这个桶就会发生溢出。
在哀求处置惩罚过程中,水代表从客户端来的哀求,而桶代表了一个队列,哀求在该队列中依据先进先出(FIFO)算法等待被处置惩罚。漏的水代表哀求离开缓冲区并被服务器处置惩罚,溢出代表了哀求被丢弃而且永不被服务。

一、限定访问频率(正常流量)
Nginx中我们利用ngx_http_limit_req_module模块来限定哀求的访问频率,基于漏桶算法原理实现。接下来我们利用 nginx limit_req_zone 和 limit_req 两个指令,限定单个IP的哀求处置惩罚速率。
语法:
  1. limit_req_zone key zone rate
复制代码

      
  • key :界说限流对象,binary_remote_addr 是一种key,表示基于 remote_addr(客户端IP) 来做限流,binary_ 的目标是压缩内存占用量。  
  • zone:界说共享内存区来存储访问信息, myRateLimit:10m 表示一个大小为10M,名字为myRateLimit的内存地域。1M能存储16000 IP地点的访问信息,10M可以存储16W IP地点访问信息。  
  • rate 用于设置最大访问速率,rate=10r/s 表示每秒最多处置惩罚10个哀求。Nginx 现实上以毫秒为粒度来跟踪哀求信息,因此 10r/s 现实上是限定:每100毫秒处置惩罚一个哀求。这意味着,自上一个哀求处置惩罚完后,若后续100毫秒内又有哀求到达,将拒绝处置惩罚该哀求。
二、限定访问频率(突发流量)
按上面的设置在流量突然增大时,超出的哀求将被拒绝,无法处置惩罚突发流量,那么在处置惩罚突发流量的时间,该怎么处置惩罚呢?Nginx提供了 burst 参数来解决突发流量的题目,并联合 nodelay 参数一起利用。burst 译为突发、发作,表示在凌驾设定的处置惩罚速率后能额外处置惩罚的哀求数。

burst=20 nodelay表示这20个哀求立马处置惩罚,不能延迟,相当于特事特办。不外,即使这20个突发哀求立马处置惩罚竣事,后续来了哀求也不会立马处置惩罚。burst=20 相当于缓存队列中占了20个坑,即使哀求被处置惩罚了,这20个位置这只能按 100ms一个来开释。这就达到了速率稳固,但突然流量也能正常处置惩罚的效果。
三、限定并发连接数
Nginx 的ngx_http_limit_conn_module模块提供了对资源连接数进行限定的功能,利用 limit_conn_zone 和 limit_conn 两个指令就可以了。

limit_conn perip 20:对应的key是 $binary_remote_addr,表示限定单个IP同时最多能持有20个连接。 limit_conn perserver 100:对应的key是 $server_name,表示假造主机(server) 同时能处置惩罚并发连接的总数。注意,只有当 request header 被后端server处置惩罚后,这个连接才进行计数。
好了,以上几种限流方式,你都清楚了吗?
以上就是本文的全部内容,盼望对大家的学习有所资助,也盼望大家多多支持草根技能分享。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作