使用 keyval 模块为 nginx 反向代理配置动态黑名单
173 次浏览
发表于 2022-09-16 16:52

nginx上开发的http keyval模块和stream keyval模块,给用户提供了通过动态API配置键值对(key-value pair)的能力。键值对代表的是存储能力,可以存储key-value形式的数据。那么,如何使用keyval模块提供的这种能力呢?下面就介绍一下在nginx反向代理的应用场景中,使用keyval模块动态配置黑名单的方法。

首先,在nginx.conf配置文件中添加下面的配置,将nginx作为www.baidu.com的反向代理,同时配置blacklist的相关指令。

http {
    #其他配置...
               
    keyval_zone zone=blacklist:10type=ip state=/var/lib/nginx/state/blacklist.kv timeout=10m;
    keyval $remote_addr $deny zone=blacklist;

    server {
        listen       80;
        server_name  localhost;
                   
        if ($deny ~* "deny") {
            return 403;
        }
                  
        location /
        {
            proxy_pass      https://www.baidu.com;
        }
    }
               
    #其他配置...
}

接下来,通过动态API来配置黑名单,在操作的过程中可以看到黑名单生效。开始时,黑名单是空的。

curl -s http://127.0.0.1/api/7/http/keyvals/blacklist
{}

此时,在浏览器中能够通过nginxIP地址访问到www.baidu.com

现在,添加一个黑名单配置项,将客户端IP地址加入黑名单。

curl -X POST -d '{"192.168.1.100":"deny"}' -s http://127.0.0.1/api/7/http/keyvals/blacklist
curl -s http://127.0.0.1/api/7/http/keyvals/blacklist
{"192.168.1.100":"deny"}

此时,通过nginx做反向代理访问www.baidu.com会被禁止:

再通过动态API修改黑名单,使之前的黑名单配置项失效,允许户端访问:

curl -X PATCH -d '{"192.168.1.100:"pass"}' -s http://127.0.0.1/api/7/http/keyvals/blacklist
curl -s http://127.0.0.1/api/7/http/keyvals/blacklist
{"192.168.1.100":"pass"}

此时,客户端浏览器又能够通过nginx访问到www.baidu.com

上面的例子展示了keyval模块结合动态API提供的动态配置能力。但这不是keyval模块唯一的应用,在nginx上还有更多的场景可以使用keyval存储的键值对数据。


如果您觉得不错,就打赏支持一下吧〜
已有 0 人进行打赏
发表评论
发表者

NgxPupil

暂无个人介绍

  • 1

    文章

  • 0

    关注

  • 0

    粉丝

活动推荐
Copyright 公安部网络安全保卫局 All Rights Reserved
京公网安备 11010502047880号    京ICP备05070602号