当前位置:首页 > Web开发 > 正文

limit_conn

2024-03-31 Web开发

操作ngx_http_limit_req_module模块,可按照键值(如ip)限制每分钟的速率;

limit_req_zone 用来限制单位时间内的请求数,即速率限制,给与的漏桶算法 "leaky bucket"  , 

limit_req_conn 用来限制同一时间连接数,即并发限制  

其实看官方的不变比看百度查到的不变,配置起来更明了。但是,官方给的说明,这里还是百度看到一些文章,摘录一些,做些条记,

关于limit_req和limit_conn的区别

what is the difference  between connection and request? 

 connection是连接,即常说的tcp连接,通过三次握手而成立的一个完整状态机。成立一个连接,必需得要三次握手。

request是指请求,即http请求,tcp连接是有状态的,而构建在tcp之上的http倒是无状态的协议

通过打开一个网页,然后通过wareshark可以看到,一个连接成立后(即三次握手后),在这个连接断开之前(即四次挥手之前),会有很多的http request,这就是他们的区别:即一个连接的生命周期中,会存在一个或者多个请求,这是为了加快效率,制止每次请求都要三次握手成立连接,此刻的HTTP/1.1协议都撑持这种特性,叫做keepalive。

limit_conn_zone $binanry_remote_addr zone=conn_zone:1m;

limit_conn conn_zone 1;  

这样的配配置,表白以ip为key,来限制每个ip访谒lmit.html文件时候,最多只能有一个在线,否则其余的都要返回不成用。

这种情况就是一个静止状态的计数可以实现,而无关乎多永劫间。

举个例子,如果你的这个连接一直不释放,即使你通过这一个连接发送出再多的request请求,只要我能够应付,那么我就帮你措置惩罚惩罚

但是,如果你只需要措置惩罚惩罚2个请求,但是这两个请求是分袂用两个连接同时发送过来的,那么,我就只能措置惩罚惩罚此中一个,此外一个就不行。这就是他的区别。

limit_req_zone $binary_remtoe_addr zone=req_zone:1m rate=1r/s; #这里需要为共享内存配置一个速率rate,

limit_conn zone=req_zone;

表白:对付每个ip来说,措置惩罚惩罚请求的速度不赶过每秒1个请求

可以看到这是个速器量(而上面的阿谁是数字量,速度和个数还是有直不雅观的区另外吧。。)

是同时发送出100个请求(不管是通过100个连接还是1个连接),只要你请求到底的速度赶过每秒1个,那么我就会拒绝你。

按照官方给出的:

具体配置如下

http { ########################### 限速配置 ################################
limit_conn_log_level error;
limit_conn_status 503;
#limit_conn_zone $binary_remote_addr zone=one:1m;
#limit_conn_zone $server_name zone=perserver:1m;
# 界说一个名为allips的limit_req_zone用来存储session,巨细是10M内存,,
# 以$binary_remote_addr 为key,限制平均每秒的请求为20个,
# 1M能存储16000个状态,rete的值必需为整数,
# 如果限制两秒钟一个请求,可以设置成30r/m ,此中$binary_remote_addr有时需要按照本身已有的log_format变量配置进行替换
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

#limit_req zone=perip burst=10;
# 限制客户端并发连接数量为20, allow only one connection per an IP address at a time(每次). ;
#是限制每个IP只能倡议20连接 (addr 要跟 limit_conn_zone 的变量对应)
limit_conn perip 15;
limit_conn perserver 15;
   ############################ web server #######################
include /etc/nginx/http/http_web.conf;

}

nginx连接数限制模块

limit_conn

指令语法: limit_conn zone number;
默认值: —
使用字段: http, server, location
指定一个zone的每个key最大连接数

限制每个name对应客服真个连接数,好比上面的limit_conn addr 5;意思就是此刻addr这个name对应的客服真个连接数,好比name对应的是45.168.68.202这个ip地点,那么这个ip最多有5个并发连接

那什么并发呢?像这样的连接,请求达到并已经读取了请求头信息到响应头信息发送完毕,在这个过程中的连接,当一个客服真个并发连接到达我们设置的5个以上时,会返回503 (Service Temporarily Unavailable) 错误

这里,小伙伴对这个zone预计还是有一些疑问,有疑问可以不才面评论,大家一起讨论,好比,有人可能会问,一个客服端占用5个,那么327680只能容纳65536个客服端,那么第65537个客服端就会返回503错误

limit_conn_zone

语法:

Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
看上面的语法,limit_conn_zone只能用在http段,例如:

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31720.html