网站首页 > 技术教程 正文
一般对外暴露的系统,在促销或者黑客攻击时会涌来大量的请求,为了保护系统不被瞬间到来的高并发流量给打垮, 就需要限流,文章主要介绍了nginx限流方案的实现,希望对大家有帮助~
通过查看nginx官方文档,归纳为三种nginx限流方式:
- limit_conn_zone
- limit_req_zone
- ngx_http_upstream_module
前两种只能对客户端(即单一ip限流),并且文档也很全,但是经过测试发现,还是无法达到官方文档所说的结果。
这里先简单的介绍一下前两种:
limit_conn_zone
1.1 nginx配置
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)
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.。
ngx_http_upstream_module
3.1 介绍
作为优秀的负载均衡模块,目前是我工作中用到最多的。其实,该模块是提供了我们需要的后端限流功能的。通过官方文档介绍,该模块有一个参数:「max_conns」可以对服务端进行限流,可惜在商业版nginx中才能使用。
然而,在nginx1.11.5版本以后,官方已经将该参数从商业版中脱离出来了,也就是说只要我们将生产上广泛使用的nginx1.9.12版本和1.10版本升级即可使用(通过测试可以看到,在旧版本的nginx中,如果加上该参数,nginx服务是无法启动的)。
3.2 配置Nginx
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(这里只是假设)
PS:还有很重要的几点。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个请求
猜你喜欢
- 2024-10-11 Python运维:Nginx作为七层负载均衡调度器
- 2024-10-11 nginx的反向代理(nginx的反向代理模块是啥)
- 2024-10-11 Nginx学习笔记(14) 用于定义上游服务的upstream模块
- 2024-10-11 入口网关服务发现-Openresty动态upstream
- 2024-10-11 nginx可以集群吗(nginx集群 并绑定一个ip)
- 2024-10-11 nginx的upstream目前支持5种方式的分配
- 2024-09-21 详解:Nginx 反向代理、后端检测模块
- 2024-09-21 Nginx反向代理相关设置(基于linux)
- 2024-09-21 简单练习Nginx反向代理和负载均衡
- 2024-09-21 nginx upstream header过大问题解决
你 发表评论:
欢迎- 最近发表
-
- Linux新手必看:几种方法帮你查看CPU核心数量
- linux基础命令之lscpu命令(linux中ls命令的用法)
- Linux lscpu 命令使用详解(linux常用ls命令)
- 如何查询 Linux 中 CPU 的数量?这几个命令要知道!
- 在linux上怎么查看cpu信息(linux如何查看cpu信息)
- 查看 CPU 的命令和磁盘 IO 的命令
- 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- Linux 网络命令知多少(linux 网络 命令)
- Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)