连接频率限制 - limit_conn_module
请求频率限制 - limit_req_module
HTTP协议的连接与请求
HTTP请求建立在一次TCP连接基础上
一次TCP请求至少产生一次HTTP请求
连接限制
语法配置
Syntax: limit_conn_zone key zone=name:size;
Default: -
Context:http
Syntax: limit_conn zone number;
Default: -
Context:http,server,location
连接限制
语法配置
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
使用 请求限制
请求限制
这两个只能写在http中
limit_conn_zone $binanry_remote_addr zone=conn_zone:1m;
limit_req_zone $binanry_remote_addr zone=req_zone:1m rate=1r/s;
remote_addr 用户ip地址
binanry_remote_addr 同样是用户地址 但是二进制 占用空间内存更小
rate数率 一秒一次
zone:空间 大小
ab 工具 多次请求 百度一下
ab -n 50 -c 20 http://xxx/index.html
-n 请求次数
-c 并发量
limit_conn_zone $binanry_remote_addr zone=conn_zone:1m;
limit_req_zone $binanry_remote_addr zone=req_zone:1m rate=1r/s;
server {
location / {
root /opt/app/code;; #放首页的目录
limit_req zone=req_zone burst=3 nodelay;
index index.html index.htm;
}
}
limit_req zone=req_zone burst=3 nodelay;
req_zone 就是上面的命名空间
burst=3 就是有三个是延迟响应 其他的
nodelay 其他的就直接响应
测试ab -n 20 -c 20 http://xxx/index.html
由于限制了数率 一秒一次 所以20个并发 只有一次能完成
但是有三个延迟了 所以完成了4个 其他全部被限制了
连接限制
limit_conn_zone $binanry_remote_addr zone=conn_zone:1m;
limit_req_zone $binanry_remote_addr zone=req_zone:1m rate=1r/s;
server {
location / {
root /opt/app/code;; #放首页的目录
limit_conn conn_zone 1;
index index.html index.htm;
}
}
limit_conn conn_zone 1;
conn_zone 上面的 命名空间
1 同一时间只允许一个ip 连接过来