nginx-10白名单

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yt_php/article/details/87925982