1.配置参数
limit_req_zone指令设置参数
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
limit_req_zone定义在http块中,$binary_remote_addr表示保存客户端IP地址的二进制形式。
Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息约1MB,所以示例中区域可以存储160000个IP地址。
Rate定义最大请求速率。示例中速率不能超过每秒10个请求。
2.设置限流
location / {
limit_req zone=mylimit burst=20 nodelay;
proxy_pass http://real_server;
}
burst排队大小,nodelay不限制单个请求间的时间。
3.不限流白名单
geo $limit {
default 1;
192.168.2.0/24 0;
}
map $limit $limit_key {
1 $binary_remote_addr;
0 "";
}
limit_req_zone $limit_key zone=mylimit:10m rate=1r/s;
location / {
limit_req zone=mylimit burst=1 nodelay;
proxy_pass http://real_server;
}
上述配置中,192.168.2.0/24网段的IP访问是不限流的,其他限流。
IP后面的数字含义:
24表示子网掩码:255.255.255.0
16表示子网掩码:255.255.0.0
8表示子网掩码:255.0.0.0