Nginx的请求限制
限制这里我们学习两类微信:
连接频率限制: limit_conn_module
请求频率限制: limit_req_module
我们先看一下HTTP协议的连接与请求:
图片.png
我们知道HTTP协议是基于TCP的,如果要完成一次HTTP请求的时候,首先进行TCP的三次握手。当建立连接的时候就可以进行请求和响应。
图片.png我们可以得到结论:
HTTP请求建立在一次TCP连接基础上
一次TCP请求至少产生一次HTTP请求(可以有多个)
对于 limit_conn_module模块:
该ngx_http_limit_conn_module模块用于限制每个定义的密钥的连接数量,特别是来自单个IP地址的连接数量。
并非所有连接都被计算在内 只有在服务器处理请求并且已经读取了整个请求头时才计算连接。
对于连接限制的配置:
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
对于第一部分可以理解在内存中开辟一个区域对于指定的nginx变量(key,例如:binary_remote_addr)进行限制。name表示申请的空间的名字,size表示申请空间的大小。
对于第二部分zone就是第一部分设置的名字name,number表示进行并发的限制。例如设置为1,表示一个时间段只能有一个。
对于ngx_http_limit_req_module模块:
用于限制每一个定义的密钥的请求的处理速率,特别是从一个单一的IP地址的请求的处理速率。限制是使用“泄漏桶”方法完成的
对于请求限制的配置:
Syntax: limit_req_zone key zone=name:size rate=rate;
Default: —
Context: http
Syntax: limit_req zone=name [burst=number] [nodelay];
Default: —
Context: http, server, location
对于第一部分配置和连接配置相似,rate表示速率,以秒s为单位(rate=1r/s)
对于第二部分zone就是第一部分设置的名字name,[]内为可配置选项。
实例:
首先编写配置文件
图片.png
我们看到上面为定义zone,第二行是请求定义,表示对远程请求进行每秒一次的请求限制。这里的binary_remote_addr和remote_addr代表的含义是一样的(远程主机的IP)只是使用binary_remote_addr存储一个IP会比remote_addr省10个字节。
保存重新加载
[root@hongshaorou conf.d]# nginx -tc /etc/nginx/nginx.conf
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@hongshaorou conf.d]# systemctl reload nginx
我们对配置进行一下解释:
burst=3 表示当我们的请求速率超过配置的rate=1r/s将会遗留三个到下一秒执行。
来对客户端进行延迟响应。
这部分暂时未理解希望二刷明白。