请求限制
(1)连接频率限制:limit_conn_module
(2)请求频率限制:limit_req_module
配置语法
连接限制配置语法
Syntax:limit_conn_zone key zone=name:size;
Default:默认无
Context:http
name:空间名字,size:空间大小
并发数量
Syntax:limit_conn zone number;
Default:默认无
Context:http,server,location
zone应该是上面的zone配置的名字
测试
/etc/nginx/conf.d/default.conf
limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
server {
#..............
location / {
root /opt/app/code;
#limit_conn conn_zone 1;
#limit_req zone=req_zone burst=3 nodelay;
#limit_req zone=req_zone burst=3;
#limit_req zone=req_zone;
index index.html index.htm;
}
# ...................
}
使用ab -n 20 -c 20 http://192.168.174.132/1.html
进行压力测试。
使用limit_req zone=req_zone;
,测试发现20个请求,失败了19个。
使用limit_req zone=req_zone burst=3 nodelay;
,测试发现20个请求,失败了16个(相比上面的结果,有三个是非延时建立请求)。
使用limit_req zone=req_zone burst=3;
,测试发现20个请求,失败了16个(相比上面的结果,有三个是延时建立请求,阻塞时的请求,一秒1个,故大约消耗3秒)。
请求限制配置语法
Syntax:limit_req_zone key zone=name:size rate=rate;
Default:默认无
Context:http
Syntax:limit_req_zone zone=name [burst=number] [nodelay];
Default:默认无
Context:http,server,location
注:burst表示后续响应的个数,nodelay表示是否延时。
测试
使用limit_conn conn_zone 1;
,测试发现20个连接,失败了0个(猜测:连接可以建立在一个请求上,所以并发程度高)。