通过查看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实现404页面的几种方法(三种),包括了Nginx实现404页面的几种方法(三种)的使用技巧和注意事项,需要的朋友参考一下 一个网站项目,肯定是避免不了404页面的,通常使用Nginx作为Web服务器时,有以下集中配置方式,一起来看看。 第一种:Nginx自己的错误页面 Nginx访问一个静态的html 页面,当这个页面没有的时候,Nginx抛出404,那么如何返回给客户端
本文向大家介绍使用nginx实现分布式限流的方法,包括了使用nginx实现分布式限流的方法的使用技巧和注意事项,需要的朋友参考一下 1.前言 一般对外暴露的系统,在促销或者黑客攻击时会涌来大量的请求,为了保护系统不被瞬间到来的高并发流量给打垮, 就需要限流 . 本文主要阐述如何用nginx 来实现限流. 听说 Hystrix 也可以, 各位有兴趣可以去研究哈 . 2.首先部署一个对外暴露接口的程序
本文向大家介绍nginx 如何实现读写限流的方法,包括了nginx 如何实现读写限流的方法的使用技巧和注意事项,需要的朋友参考一下 nginx 读写限流 前段时间,开发了一个供外部调用的api,领导说要限流,请求单个IP,每秒50读次,写10次 万能的nginx,几行配置搞定 nginx -s reload 还是那句话,应用程序不需要关心,一句代码都不用动 感谢阅读,希望能帮助到大家,谢谢大家对本
如果要成为一个有一定水平的程序员,算法是必须要会的。算法,让你的程序变得更有灵气。
本文向大家介绍Android 动画实现几种方案,包括了Android 动画实现几种方案的使用技巧和注意事项,需要的朋友参考一下 Android 动画实现几种方案 在 Android 的 FrameWork 中,为我们提供三种动画的实现方式:逐帧(Frame)动画、视图/补间动画(View Animation)和属性动画(Property Animation)。由于,这三种动画的实现方式和针对面不一
本文向大家介绍Nginx负载均衡的4种方案配置实例,包括了Nginx负载均衡的4种方案配置实例的使用技巧和注意事项,需要的朋友参考一下 1、轮询 轮询即Round Robin,根据Nginx配置文件中的顺序,依次把客户端的Web请求分发到不同的后端服务器。 配置的例子如下: 上面只有1个DNS入口被插入到upstream节,即sampleapp,同样也在后面的proxy_pass节重新提到。 2、