通过查看nginx官方文档,小弟查看到了三种nginx限流方式。

1、limit_conn_zone

2、limit_req_zone

3、ngx_http_upstream_module

前两种只能对客户端(即单一ip限流),并且文档也很全,但是经过测试发现,还是无法达到官方文档所说的结果(可能小弟的测试方法有问题)。

这里先简单的介绍一下前两种:

1、limit_conn_zone

1.1nginx配置

http{ limit_conn_zone $binary_remote_addr zone=one:10m; server { ...... limit_conn one 10; ...... }
}

其中“limit_conn one 10”既可以放在server层对整个server有效,也可以放在location中只对单独的location有效。
该配置表明:客户端的并发连接数只能是10个。

1.2结果

ab工具20并发去请求nginx,可以看到
Complete requests: 20
Failed requests: 9

(由于nginx配置中一个ip并发连接数为10,而结果中成功数为+1的原因未知;nginx的日志中也可以看到有9个请求返回503)

2、limit_req_zone

2.1 nginx配置

http{ limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s; server { ...... limit_req zone=req_one burst=120; ...... }
}

其中“limit_req zone=req_one burst=120”既可以放在server层对整个server有效,也可以放在location中只对单独的location有效。

rate=1r/s的意思是每个地址每秒只能请求一次,也就是说令牌桶burst=120一共有120块令牌,并且每秒钟只新增1块令牌,120块令牌发完后,多出来的请求就会返回503.。

3、ngx_http_upstream_module

3.1 介绍

作为优秀的负载均衡模块,目前是我工作中用到最多的。其实,该模块是提供了我们需要的后端限流功能的。通过官方文档介绍,该模块有一个参数:max_conns可以对服务端进行限流,可惜在商业版nginx中才能使用。然而,在nginx1.11.5版本以后,官方已经将该参数从商业版中脱离出来了,也就是说只要我们将生产上广泛使用的nginx1.9.12版本和1.10版本升级即可使用(通过测试可以看到,在旧版本的nginx中,如果加上该参数,nginx服务是无法启动的)。

3.2配置

upstream xxxx{ server 127.0.0.1:8080 max_conns=10; server 127.0.0.1:8081 max_conns=10; } 

3.3结果(不便截图)

用两台机器各自用ab工具向nginx发送20、30、40个并发请求:

可以看到无论并发多少,成功的请求只有12个,成功的次数会多个2个,同时1.2的测试结果中成功次数也是+1,这里是两台机器,基于此种考虑,将机器增加至三台,果然成功的次数为13个。这里得出一个假想,成功的请求数会根据客户端的+1而+1(这里只是假设)

注:还有很重要的几点。max_conns是针对upstream中的单台server的,不是所有;nginx有个参数:worker_processes,max_conns是针对每个worker_processes的;

附ab工具安装步骤(转载,来源未知)

#ab运行需要依赖apr-util包,安装命令为:
yum install apr-util
#安装依赖 yum-utils中的yumdownload 工具,如果没有找到 yumdownload 命令可以
yum install yum-utils
cd /opt
mkdir abtmp
cd abtmp
yum install yum-utils.noarch
yumdownloader httpd-tools*
rpm2cpio httpd-*.rpm | cpio -idmv
#操作完成后 将会产生一个 usr 目录 ab文件就在这个usr 目录中
#简单使用说明
./ab -c 100 -n 10000 http://127.0.0.1/index.html
#-c 100 即:每次并发100个
#-n 10000 即: 共发送10000个请求

nginx限流方案的实现(三种方式)相关推荐

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

    Nginx现在已经是最火的负载均衡之一,在流量陡增的互联网面前,接口限流也是很有必要的,尤其是针对高并发的场景.Nginx的限流主要是两种方式:限制访问频率和限制并发连接数. 限流(rate limi ...

  2. 微服务架构服务限流方案详解

    话说在 Spring Cloud Gateway 问世之前,Spring Cloud 的微服务世界里,网关一定非 Netflix Zuul 莫属.但是由于 Zuul 1.x 存在的一些问题,比如阻塞式 ...

  3. Nginx源码研究之nginx限流模块详解

    这篇文章主要介绍了Nginx源码研究之nginx限流模块详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 高并发系统有三把利器:缓存.降级和限流: 限流的目的是通过对并 ...

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

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

  5. 分布式高并发服务三种常用限流方案简介

    以下文章来源于技术岁月 ,作者贺鹏Kavin 在高并发大流量系统中,由于并发大造成服务资源不足,负载过高,进而引发致一系列问题,这里的流量一般都是突发性的,由于系统准备不足,很难短期扩容来应对 ,进行 ...

  6. 常用限流方案的设计和实现

    为了保证在业务高峰期,线上系统也能保证一定的弹性和稳定性,最有效的方案就是进行服务降级了,而限流就是降级系统最常采用的方案之一. 限流即流量限制,或者高大上一点,叫做流量整形,限流的目的是在遇到流量高 ...

  7. Nginx 限流方法

    Nginx 限流方法 运维猿 2018-10-23 17:25:31 限流(rate limiting)是Nginx众多特性中最有用的,也是经常容易被误解和错误配置的,特性之一.该特性可以限制某个用户 ...

  8. Nginx限流模块limit_req_zone、limit_req_conn

    根据nginx官网提供的说法,有两种算法,一种是漏桶算法,一种是令牌桶算法. limit_req_zone 用来限制单位时间内的请求数目,以及速度限制. limit_req_conn 用来限制同一时间 ...

  9. nginx 限流,以及nginx直接返回json格式数据

    2019独角兽企业重金招聘Python工程师标准>>> 高并发系统有三把利器用来保护系统:缓存.降级和限流 今天我们这里说说限流.一般会在应用层配合redis做限流策略,这里我们聊聊 ...

最新文章

  1. zabbix items 配置
  2. vue动态设置文字布局方式_详解Vue动态添加模板的几种方法
  3. sjms-1 面向对象
  4. React Native开发学习笔记——WebStorm运行项目
  5. linux中用户与组的概念,Linux用户和组的概念
  6. Linux有关信息收集命令
  7. Emmet 也有快速生成文件头的功能
  8. 查找算法之一 顺序查找
  9. 免费小说网站源码 主题XSnov WordPress主题
  10. 解决iconfont 图标不显示问题
  11. 关于DiskGenius 克隆分区和系统迁移问题,以及如何解决缺少系统引导、双硬盘双系统引导问题,多个启动项
  12. 如何在Hexo中对文章md文件分类
  13. Android事件分发理解
  14. android谷歌地图_Android Google地图:添加天气数据
  15. html 通过name选择器,用name方式获得选择器总结
  16. 文本对抗:《Semantically Equivalent Adversarial Rules for Debugging NLP Models》
  17. 说说你平时怎么优化mysql的_面试:给我说说你平时是如何优化MySQL的?
  18. lr创建mysql odbc_LoadRunner利用ODBC编写MySql脚本(转)
  19. 通过powershell安装360安全卫士
  20. echarts 点击方法总结,点任意一点获取点击数据,举例说明:在多图联动中点击绘制标线...

热门文章

  1. 连接mysql数据库小知识记录
  2. pythoncsv数据类型_python – 从CSV文件行中的值确定数据类型
  3. 3项目里面全局用less变量 cli vue_vue-cli3全局载入scss变量或less变量配置
  4. 武汉linux内核好找吗,Linux内核入门
  5. 织梦charset.func.php,DEDECMS织梦程序实现熊掌号API提交接口推送(PHP推送)
  6. 【专栏精选】实战:使用LeanCloud上传玩家分数,实现排行榜
  7. oracle+rownum(),Oracle rownum和row_number()
  8. 谷歌正在移除 Chrome 的“关闭其他选项卡”选项
  9. 微信登录画面_微信登录界面改版,美炸了!
  10. pip更新命令_如何批量更新电脑中的python包?