ngx_http_access_module模块中
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
deny all;
}
通过allow\deny指令允许/拒绝某些IP、IP段的访问。但是正如access模块文档中说到的
在规则很多的情况下,使用 ngx_http_geo_module 模块变量更合适。
例如,对某些IP限制请求处理的频率,allow/deny无法更好的处理。而希望自己测试的IP或者某些IP不受限制。那么就需要geo模块了。
它默认从内嵌变量$remote_addr获取客户端IP,所以address可以省略。
文档拉到最下边
IP-----值 是一一对应的,当客户端IP满足某个IP段时,就将值赋值给变量country,右边的值大写字母是用户自定义的。如客户端IP为127.0.0.2,那么country变量=US 美国。
限制请求处理频率的白名单
geo $white {
ranges;
default 1; //其他IP
127.0.0.1-127.0.0.1 0; //本地
27.189.227.110-27.189.227.110 0; //测试IP
}
再对$white做映射
map $white $limitip {
1 $binary_remote_addr; //其他IP 赋值给$limitip为二进制的IP地址
0 ""; //白名单IP
}
ngx_http_limit_req_module 限制请求处理频率模块
http {
limit_req_zone $limitip zone=two:10m rate=1r/s; #限制频率为一秒请求一次
limit_req_status 503;
limit_req_log_level info;
location / {
limit_req zone=two;
压测
白名单-本地127.0.0.1 全部请求成功
ab -n 20 -c 10 http://127.0.0.1/aa
白名单-测试IP 全部请求成功
ab.exe -n 20 -c 10 http://xx.xxx.83.167/aa
其他IP 被限制请求频率
ab -n 20 -c 10 http://xx.xxx.83.167/aa