5. Nginx基础模块-Nginx访问限制

1 Nginx访问限制

经常会遇到这种情况,服务器流量异常,负载过大等等,对于流量恶意的攻击访问,会带来带宽的浪费,服务器压力,影响业务,往往考虑到对同一个ip的连接数,并发数进行限制。

ngx_http_limit_conn_module模块可以根据一定的key来限制每个键值的连接数,如同一个IP来源的连接数

limit_conn_module 连接频率限制

limit_req_module 请求频率限制

http协议的连接与请求

HTTP是建立在TCP上,完成HTTP请求需要先建立TCP三次握手(称为TCP连接),再连接的基础上HTTP请求

HTTP请求建立在一次TCP连接基础上,一次TCP请求至少产生一次HTTP请求。

变量:

$binary_remote_addr 变量的长度是固定的4字节

$remote_addr 变量的长度是7-15字节

IP个ip地址32bit=4字节

1.1 Nginx连接限制语法

Syntax:limit_conn_zone key zone=name:size;

Default:–

Context:http

Syntax:limit_conn zone number;

Default:-

Context:http, server, location

1.2 代码使用方法

Nginx 连接限制实践

http {
//http段配置连接显示,同一时刻只允许一个客户端IP连接
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
......
		server	{
......
					location	/ {
.....
						limit_conn conn_zone 1;	 //同一时刻只允许一个客户端ip连接
		}
}

Nginx请求限制实战

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

1.3 压力测试

使用ab工具进行压力测试

yum install -y httpd-tools

[root@nginx_web1 ~]# ab -n 50 -c 20 http://127.0.0.1/index.html
在这里插入图片描述

4.4 Nginx连接限制没有请求限制有效

我们前面说的,多个请求可以建立再一次tcp连接之上,那么我们对请求的精准度,当然比对一个链接限制会更加有效,因为同一时刻只允许一个连接请求进入,但是同一时刻多个请求可以通过一个连接进入。所以我们请求限制是比较优的解决方案。

猜你喜欢

转载自blog.csdn.net/weixin_43357497/article/details/113764058