首页 > 其他 > 详细

Nginx 功能模块2 - 限制并发、限制访问速率、限制流量

时间:2019-03-08 22:45:53      阅读:207      评论:0      收藏:0      [点我收藏+]

1. 前言

  本文针对 Nginx 的三个模块进行配置,并证实各自的功能特点:

  (1)limit_conn_zone 模块  - 限制同一 IP 地址并发连接数;

  (2)limit_request 模块 - 限制同一 IP 某段时间的访问量;

  (3)core 模块提供 - limit_rate 限制同一 IP 流量。

  在 Nginx 中 以 LIMIT 开头的 配置项,都是做 限制 功能,以上三个功能都是 Nginx 编译后就有的功能,属于内置模块。

 

2. limit_conn_zone 模块

  通过 limit_zone 模块来达到限制用户的连接数的目的,即限制同一用户 IP 地址的并发连接数

 

2.1 配置示例

技术分享图片

 

 

2.2 指令

指令名称:limit_conn_zone

(nginx 1.18以后用 limit_conn_zone 取代了 limit_conn)

语法:limit_conn_zone key zone=name:size;

默认:no

区域:http

功能:该指令定义一个 zone,该 zone 存储会话的状态。

例如:上面的例子中,$binary_remote_addr  是 获取客户端ip地址的变量,长度为 4 字节,会话信息的长度为 32 字节。

 

指令名称:limit_conn

语法:limit_conn zone number;

默认:no

区域:http、server、location

功能:该指令用于为一个会话设定最大并发连接数。如果并发请求超过这个限制,那么将返回预定错误(limit_conn_status )

 

指令名称:limit_conn_status

语法:limit_conn_status code;

默认:limit_conn_status 503;

区域:http、server、location

功能:设置要返回的状态码以响应被拒绝的请求。

 

指令名称:limit_conn_log_level

语法:limit_conn_log_level info | notice | warn | error

默认值:error

区域:http、server、location

功能:该指令用于设置日志的错误级别,当达到连接限制时,将会产生错误日志。

 

上面的配置示例中,没有显式配置 limit_conn_status 、limit_conn_log_level ,如果没有配置,则启用它们的默认值。

 

 

2.3 测试

接下来,对 limit_conn_zone 模块的功能进行测试。

 

(1)测试1:对页面访问的并发限制

首先,来尝试用户对页面访问的并发限制,配置如下:

技术分享图片

 

 

通过配置,设定 location /download 这个区域,每个IP,同一时刻只存在一个连接。注意:并发的概念并不是说 每秒多少连接。

生成一个较大的 index.html 页面:

[root@10.0.10.158 /usr/local/nginx/conf]#cd ../html/
[root@10.0.10.158 /usr/local/nginx/html]#mkdir download/
[root@10.0.10.158 /usr/local/nginx/html]#cd download/
[root@10.0.10.158 /usr/local/nginx/html/download]#for i in {1..10000}; do echo "hello, $i" >> index.html ; done
[root@10.0.10.158 /usr/local/nginx/html/download]#ll -sh index.html
192K -rw-r--r-- 1 root root 117K Mar  8 21:16 index.htm

 

 

客户端主机:10.0.10.159 通过 ab 命令模拟并发访问:

[root@10.0.10.159 ~]#ab -n 10 -c 10 http://10.0.10.158/download/index.html

 

-n:总请求数:10

-c:单个时刻并发 10

 

技术分享图片

 

通过上面的测试,只有 2 个连接错误。经过多次测试,这个问题依然存在,也查阅过一些资料,有人表示这是个 BUG 的。目前还是表示疑惑的,希望有人能够帮忙解惑。

 

(2)测试2:对文件下载进行测试,或者是访问较大的文件

生成一个 100M  的文件,因为局域网 千兆网络,所以生成的比较大。

[root@10.0.10.158 /usr/local/nginx/html/download]#dd if=/dev/zero of=testfile bs=1M count=100

 

 然后在用 ab 进行测试:

[root@10.0.10.159 ~]#ab -n 10 -c 10 http://10.0.10.158/download/testfile

 

 技术分享图片

经过这次的测试,完成了 10 个并发连接,其中 9 个返回的是 非200 的状态。继续查看 Nginx 日志:

技术分享图片

 

10 个并发连接,其中只有 1 个返回 200 状态,其余 9 个都是 503 状态,这样的测试结果和设定的配置相符。

 

2.4 总结

通过上面两次测试结果来看:第一次测试结果,配置的并发请求为 1 的限制貌似没有起到作用。第二次测试结果,完全符合配置项的限制规则。而这两次测试唯一的不同就是:数据文件大小不同

这里只能猜想:对于较小的文件或页面,在千兆网络的环境里,单个时刻请求数据的速度很快,并没有造成多个连接同时并发的情况产生,而对于较大的页面或文件来说,文件正在传输的时候处于 ESTABLISHED连接时间长,非常容易形成并发的效果,并发就会触发限制规则。这也只是简单的猜想,希望有大神能够给出具体的科学的解释。

 

(待续。。。)

 

Nginx 功能模块2 - 限制并发、限制访问速率、限制流量

原文:https://www.cnblogs.com/hukey/p/10498544.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!