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的请求处理速率。

语法: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处理后,这个连接才进行计数。

好了,以上几种限流方式,你都清楚了吗?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • Nginx对网段内ip的连接数限流配置详解
  • Nginx源码研究之nginx限流模块详解
  • nginx限流方案的实现(三种方式)
  • 使用nginx实现分布式限流的方法
  • nginx 如何实现读写限流的方法

一文搞懂Nginx限流(简单实现)相关推荐

  1. 10分钟带你彻底搞懂服务限流和服务降级

    文章目录 十分钟搞懂系列 服务限流 计数器法 滑动窗口法 漏桶算法 令牌桶算法 服务降级 十分钟搞懂系列 序号 标题 链接 1 10分钟带你彻底搞懂企业服务总线 https://blog.csdn.n ...

  2. 十分钟搞懂Java限流及常见方案

    点击关注公众号:互联网架构师,后台回复 2T获取2TB学习资源! 上一篇:Alibaba开源内网高并发编程手册.pdf 文章目录 限流基本概念 QPS和连接数控制 传输速率 黑白名单 分布式环境 限流 ...

  3. 12张图带你彻底搞懂服务限流、熔断、降级、雪崩

    目录 一.服务雪崩 二.服务限流 1.限流指标 1)TPS 2)HPS 3)QPS 2.限流方法 1)流量计数器 2)滑动时间窗口 3)漏桶算法 4)令牌桶算法 5)分布式限流 6)hystrix限流 ...

  4. 【7W字长文】使用LVS+Keepalived实现Nginx高可用,一文搞懂Nginx

    往期文章一览 分布式会话与单点登录SSO系统CAS,包含完整示例代码实现 [15W字长文]主从复制高可用Redis集群,完整包含Redis所有知识点 使用LVS+Keepalived实现Nginx高可 ...

  5. 一文搞懂Nginx如何配置Http、Https、WS、WSS!

    写在前面 当今互联网领域,Nginx是使用最多的代理服务器之一,很多大厂在自己的业务系统中都是用了Nginx作为代理服务器.所以,我们有必要了解下Nginx对于Http.Https.WS.WSS的各项 ...

  6. 【Web基础入门】一文搞懂HTML + CSS + JavaScript 简单了解

    html html是什么 超文本标记语言,运行在浏览器上 超文本:超级文本,如流媒体.声音.视频 标记语言:由大量的标签组成 标签:任何一个标签都有开始标签和结束标签 html不是编程语言,没有变量, ...

  7. 一文彻底搞懂C++文件流, 文件读写,fstream、seekg、seekp等的使用。

    彻底搞懂C++文件流. 首先需要头文件#include< fstream > fstream可以把它理解成一个父类,包含的子类有ifstream和ofstream等, 所以一般直接创建一个 ...

  8. 一文搞懂MySQL数据库分库分表

    如果数据量过大,大家一般会分库分表.分库需要注意的内容比较少,但分表需要注意的内容就多了. 工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没用过 ...

  9. sql server 配置管理器里为什么是32位_死磕 Nginx 系列:Nginx 限流配置

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 限流算法:令牌桶算法 算法思想是: 令牌以固定速率产生,并缓存到令牌桶中: 令牌桶放满时,多余的令牌被丢弃: 请求要消耗等比例的令牌才能被处 ...

最新文章

  1. 小程序 a标签_微信内循环生态:朋友圈标签引流视频号、小程序、搜一搜
  2. 大牛实战归纳——Kafka架构原理
  3. dos2unix install on mac_mac2019新品唇釉来啦!MAC有色唇油试色
  4. 客服顾问的工具箱--走出软件作坊:三五个人十来条枪 如何成为开发正规军(六)[转]...
  5. C语言课后习题(41)
  6. 敏捷开发产品管理系列之三:产品用户群规划
  7. Confluence 6 配置索引语言
  8. 【百度贾磊】汉语语音识别技术重大突破:LSTM+CTC详解(22PPT)
  9. Mybatis框架底层源码分析
  10. 2017-2018-20172309 《程序设计与数据结构》第五周学习总结
  11. 基于python 爬虫_基于python的爬虫(一)
  12. Python 科学计算
  13. 液压系统管路流速推荐表_(整理)液压系统油管选择.
  14. eclipse中修改xml文件的默认编辑器
  15. 大学物理(上)知识点总结
  16. BuBu笔记——MyBatis进阶-多表查询(秃头BUBu的超详细备注,一定要看哦)
  17. 提问的力量四:提问的艺术-体验学习中提问的技巧
  18. win10无法装载重装系统iso文件_win10镜像不能安装系统如何解决_win10镜像无法安装处理方法...
  19. 九度OJ题目1035:找出直系亲属
  20. 伊丽莎白 里昂妮丝资源_伊丽莎白·布朗(Elizabeth Brown)–湾区最具影响力的女性之一

热门文章

  1. Windows Server 2022 无线网卡装不上驱动
  2. 139邮箱smtp地址和端口_wordpress建站如何用SMTP配置邮件通知
  3. 登录用户信息存session中
  4. 上“天”入“地”,都少不了亚马逊云科技这个云引擎
  5. 第九周—等比数列求和
  6. 8880 e7 v2配什么主板_Xeon E7 v2系列21款产品详解_Intel服务器CPU_服务器评测与技术-中关村在线...
  7. Android 10 去掉系统默认谷歌输入法
  8. 苹果MacBook电脑怎么捕捉特定窗口并截屏?
  9. 云海轻站常见问题整理
  10. 软考 | 2009年下半年 软件设计师 下午试卷