limit_req_zone定义在http块中,$binary_remote_addr表示保存客户端IP地址的二进制形式。
Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息约1MB,所以示例中区域可以存储160000个IP地址。
3Rate定义最大请求速率。示例中速率不能超过每秒10个请求。
http {
limit_req_zone $host $document_uri zone=per_server_req_limit:10m rate=300r/s; #同server每秒访问300次
...
server {
...
location / {
limit_req zone=per_server_req_limit forbid_action=/limit-no.html;
add_header Web-Tag"$document_uri+$binary_remote_addr+$remote_addr";
#echo "yes";
break;
}
location = /limit-no.html {
#echo "no";
break;
}
#请求白名单会跳过limit
limit_req_whitelist geo_var_name=white_ip geo_var_value=1;
geo $white_ip {
ranges;
default 0;
127.0.0.1-127.0.0.255 1;
}