百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

长这么大才读懂高并发核心编程,限流原理与实战,Nginx漏桶限流

off999 2025-01-05 19:31 32 浏览 0 评论

Nginx漏桶限流详解

使用Nginx可通过配置的方式完成接入层的限流,其ngx_http_limit_req_module模块所提供的limit_req_zone和limit_req两个指令使用漏桶算法进行限流。其中,limit_req_zone指令用于定义一个限流的具体规则(或者计数内存区),limit_req指令应用前者定义的规则完成限流动作。

假定要配置Nginx虚拟主机的限流规则为单IP限制为每秒1次请求,整个应用限制为每秒10次请求,具体的配置如下:

 #第一条规则名称为perip,每个相同客户端IP的请求限速在6次/分钟(1次/10秒)
limit_req_zone $binary_remote_addr zone=perip:10m rate=6r/m;
#第二条限流规则名称为preserver,同一虚拟主机的请求限速在10次/秒
 limit_req_zone $server_name zone=perserver:1m rate=10r/s;
 server {
 listen 8081 ;
 server_name localhost;
 default_type 'text/html';
 charset utf-8;
 limit_req zone=perip;
 limit_req zone=perserver;
 location /nginx/ratelimit/demo {
 echo "-uri= $uri -remote_addr= $remote_addr"
 "-server_name= $server_name" ;
 }
 }

上面的配置通过limit_req_zone指令定义了两条限流规则:第一条规则名称为perip,将来自每个相同客户端IP的请求限速在6次/分钟(1次/10秒);第二条限流规则名称为preserver,用于将同一虚拟主机的请求限速在10次/秒。

以上配置位于练习工程LuaDemoProject的src/conf/nginxratelimit.conf文件中,在使之生效前需要在openresty-start.sh脚本中换上该配置文件,然后重启Nginx。接下来开始验证上面的限流配置。在浏览器中输入如下测试地址:

http://nginx.server:8081/nginx/ratelimit/demo

10秒内连续刷新,第1次的输出如图9-9所示。

10秒内连续刷新,第1次之后的输出如图9-10所示。

接下来详细介绍Nginx的limit_req_zone和limit_req两个指令。

limit_req_zone用于定义一个限流的具体规则,limit_req应用前者所定义的规则。limit_req_zone指令的格式如下:

语法:limit_req_zone key zone=name:size rate=rate [sync];
上下文:http配置块limit_req_zone指令的key部分是一个表达式,其运行时的值将作

为流量计数的关键字,key表达式包含变量、文本和它们的组合。在上面的配置实例中,$binary_remote_addr、$server_name为两个Nginx变量,$binary_remote_addr为客户端IP地址的二进制值,$server_name为虚拟机主机名称。在限流规则应用之后,它们的值将作为限流关键字key值,同一个key值会在限流的共享内存区域保存一份请求计数,而limit_req_zone限流指令所配置的速度限制只会对同一个key值发生作用。

limit_req_zone指令的zone属性用于定义存储相同key值的请求计数的共享内存区域,格式为name:size,name表示共享内存区域的名称(或者说限流规则的名称),size为共享内存区域的大小。上面的配置实例中,perip:10m表示一个名字为perip、大小为10MB的内存区域。

1MB大约能存储16 000个IP地址,10MB大约可以存储16万个IP地址,也就是可以对16万个客户端进行并发限速,当共享内存区域耗尽时,Nginx会使用LRU算法淘汰最长时间未使用的key值。

limit_req_zone指令的rate属性用于设置最大访问速率,rate=10r/s表示一个key值每秒最多能计数的访问数为10个(10个请求/秒),rate=6r/m表示一个key值每分钟最多能计数的访问数为6个(1个请求/10秒)。由于Nginx的漏桶限流的时间计算是基于毫秒的,当设置的速度为6r/m时,转换一下就是10秒内单个IP只允许通过1个请求,从第11秒开始才允许通过第二个请求。

limit_req_zone指令只是定义限流的规则和共享内存区域,规则要生效的话,还得靠limit_req限流指令完成。

limit_req指令的格式如下:

语法:limit_req zone=name [burst=number] [nodelay | delay=number];

上下文:http配置块,server配置块,location配置块limit_req指令的zone区域属性指定的限流共享内存区域(或者说限流的规则)与限流规则指令limit_req_zone中的name对应。

limit_req指令的burst突发属性表示可以处理的突发请求数。

limit_req指令的第二个参数burst是爆发数量的意思,此参数设置一个大小为number的爆发缓冲区,当有大量请求过来时,超过了限流频率的请求可以先放到爆发缓冲区内,直到爆发缓冲区满后才拒绝。

limit_req指令的burst参数的配置使得Nginx限流具备一定的突发流量的缓冲能力(有点像令牌桶)。但是burst的作用仅仅是让爆发的请求先放到队列里,然后慢慢处理,其处理的速度是由limit_req_zone规则指令配置的速度(比如1个请求/10秒),在速率低的情况下,其缓冲效果其实并不太理想。如果想迅速处理爆发的请求,那么可以再加上nodelay参数,队列中的请求会立即处理,而不再按照rate设置的速度(平均间隔)慢慢处理。

本文给大家讲解的内容是高并发核心编程,限流原理与实战,Nginx漏桶限流详解

  1. 下篇文章给大家讲解的是高并发核心编程,限流原理与实战,实战:分布式令牌桶限流;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

相关推荐

大智慧炒股软件免费版(大智慧炒股软件手机版下载安装)

你是不是点到里面的收费行情了,有Level-2行情数据的肯定要收费的这几种都可以提供一般的股票行情、交易功能。特点方面,同花顺不怎么好上手,普及程度不高。大智慧经典版可以查询主力资金。钱龙旗舰版是界面...

短信验证码(短信验证码平台app)

短信验证码可以通过以下步骤来获取和使用:明确结论:获取短信验证码需要先输入手机号码,并且会在短信中收到验证码。解释原因:短信验证码是一种验证身份的方式,用于确认用户提供的手机号是否有效,以及确保用户是...

手机电视直播大全下载安装(电视直播-手机电视直播软件下载)
  • 手机电视直播大全下载安装(电视直播-手机电视直播软件下载)
  • 手机电视直播大全下载安装(电视直播-手机电视直播软件下载)
  • 手机电视直播大全下载安装(电视直播-手机电视直播软件下载)
  • 手机电视直播大全下载安装(电视直播-手机电视直播软件下载)
下载一个微信2(下载一个微信号)

首先打开手机里面的应用商店下载安装一个微信APP,然后分别用你的2个手机号注册微信或已经注册的登陆微信就可以了,这里你可以一个微信APP上分别切换不同微信号登陆使用,不过这个有点不方便使用,接下来的办...

英语翻译中文在线翻译(英语翻译中文在线翻译软件哪个好)
  • 英语翻译中文在线翻译(英语翻译中文在线翻译软件哪个好)
  • 英语翻译中文在线翻译(英语翻译中文在线翻译软件哪个好)
  • 英语翻译中文在线翻译(英语翻译中文在线翻译软件哪个好)
  • 英语翻译中文在线翻译(英语翻译中文在线翻译软件哪个好)
视频格式转换器安卓版(视频格式转换器手机软件)

没有。可以利用电脑来转换。所需工具:格式工厂步骤:打开格式工厂,第一个界面就是视频转换的了!会看到可以转换成有很多种格式的!那就选择需要转换的格式。选择转换成MP4格式,添加完成之后直接点击“点击开始...

12306购票最简单方法(登录12306购票)

要使用铁路12306进行买票需选择出发地点以及目的地,勾选车票类型后,选择查询车票,最后提交订单方可买票,具体操作步骤如下:轻点右侧地址位置选择目的地轻点右侧地址位置选择目的地,回到铁路12306首页...

下载手机卫士(下载手机卫士官方版)

360手机卫士苹果版来自奇虎360推出的一款iPhone手机管理软件,360手机卫士苹果版推为iOS用户提供专业、完善和高效的移动设备管理服务,360手机卫士手机版可以实现流量监控、电池管家、隐私空间...

免费破解软件下载网站(免费破解版软件)

可以用腾讯手机管家的小火箭,它的功能很好用。安装完成以后,手机屏幕上就有那个加速圈--小火箭。使用小火箭加速平均提升手机速度35%。按住小火箭移到最下方,释放升空,即可轻松清理多余后台进程,释放手机内...

应用管家下载(应用市场官方正版下载安装)

1、在手机桌面找到腾讯手机管家,点击打开。2、找到右上角的头像,点击进入个人界面。3、点击右上角的齿轮图标,点击进入设置界面。4、找到安全检测,点击进去。5、找到屏幕下方的恶意网址拦截6、这样就把网址...

联通网上营业厅官网(中国联通官网登录入口)
联通网上营业厅官网(中国联通官网登录入口)

联通综合门户网站网上营业厅是中国联通推出的全国统一网上营业厅,中国联通网上营业厅为用户提供话费查询、话费充值、业务办理等服务,还提供3G号码、4G号码、3G套餐、4G套餐、5G套餐、手机、手机配件和充值卡购买等服务。还可以购买套餐,送手机等...

2026-02-02 14:43 off999

联盟平台app(联盟平台app下载)

英雄联盟除了wegame别的基本上不可以用,因为如果是非腾讯合作伙伴,运行英雄加盟应该是被判为外挂插件,或者是你直接启动客户端不用任何插件这样也可以。原来用的是tgp后来一点点被改成了wegame,...

炒股神器免费版(炒股神器是真的吗)
炒股神器免费版(炒股神器是真的吗)

炒股,指倒买倒卖股票。炒股的核心内容就是通过证券市场的买入与卖出之间的股价差额,获取利润。现在越多越来的人都了闲钱,可以用来投资理财。而炒股是许多人以钱生钱的首要选择,炒股回报高但是风险也极高。我们需要一款好的手机炒股软件来辅助我们判断。下...

2026-02-02 14:03 off999

软件商店oppo官方下载(软件商店oppo官方下载最新版安装newwear)

在桌面找到软件商店在oppo的桌面上找到软件商店,也就是应用商店。打开商店看到软件打开商店之后,能够看到有很多的软件。下载软件看详细信息在此界面可以进行下载软件,看到软件的详细信息。OPPO手机...

红警下载(红警下载中文版下载)

网上直接搜可以找到很多下载资源,但是这些资源不一定能用!如果真想玩,建议直接在某宝花几块钱购买资源,不仅方便而且会教给你怎么设置,出现什么问题怎么解决,很方便!这款游戏资源不是很好找,网上一搜确实能找...

取消回复欢迎 发表评论: