Nginx访问限制模块(limit_conn_module、limit_req_module)详解

Nginx访问限制模块分为:
请求频率限制:limit_req_module
连接频率限制:limit_conn_module

虚拟机下只能实现请求限制,连接限制要在云主机上进程。

Nginx请求限制配置

//Nginx请求限制语法
Syntax:		limit_req_zone	key	zone=name:size	rate=rate;
Default:	—
Context:	http

Syntax:	limit_req	zone	number	[burst=number]	[nodelay];
Default:	—
Context:	http,	server,	location

nginx.conf文件中:

//具体配置如下:
http	{
//http段配置请求限制,	rate限制速率,限制1秒钟最多1个请求
limit_req_zone	$binary_remote_addr	zone=req_zone:10m	rate=1r/s;
	...
	server	{
		...		
			location	/	{
				//每秒只接收一个请求,其余请求拒绝处理理并返回错误码给客户端
				limit_req	zone=req_zone;
				//请求超过1r/s,剩下的将被延迟处理理,请求数超过burst定义的数量量,多余的请求返回503
				#limit_req	zone=req_zone	burst=3	nodelay;
				}
		...	
	}
...	
}

例1:
在这里插入图片描述
压力测试:
ab -n 50 -c 20 URL
可以看到50个请求,失败了49个
在这里插入图片描述
打开错误日志,看到其他请求都被限制了
在这里插入图片描述
例2:
在这里插入图片描述
压力测试:
ab -n 50 -c 20 URL
可以看到50个请求,失败了46个,因为有一个请求被响应处理,三个请求被延迟处理,其余错误返回
在这里插入图片描述

以上的配置,limit_req放在location/下面的,只对当前匹配的URL下有效,也就是说如果还有一个location /slow { root html;…},则请求http://ip/html/slow/index.html这个页面时,以上的请求限制配置是无效的。如果把它放在server下面,则任何请求该主机下资源的URL都有效。如果放在http下,则对所有其他虚拟主机下的资源访问也有效。

Nginx连接限制配置

//Nginx连接限制语法
Syntax:		limit_conn_zone	key	zone=name:size;
Default:	—
Context:	http

Syntax:	limit_conn	zone	number;
Default:	—
Context:	http,	server,	location
//具体配置如下:
http	{
//http段配置连接限制,	同⼀时刻只允许一个客户端连接
limit_conn_zone	$binary_remote_addr	zone=conn_zone:10m;
	...
	server	{
	...		
		location	/	{
			//同一时刻只允许一个客户端连接
			limit_conn	conn_zone	1;
		}
		...	
	}
...	
}

由于一个连接可以发起多个请求,即多次请求可以建立在一次TCP连接之上,所有对请求频率的限制要比对连接频率的限制会更加有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值