点赞
评论
收藏
分享
举报
使用 keyval 模块为 nginx 反向代理配置动态黑名单
发表于2022-09-16 16:52

浏览 4.8k

在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:10m type=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
{}

此时,在浏览器中能够通过nginx的IP地址访问到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存储的键值对数据。


已修改于2023-03-08 02:27
本作品系原创
创作不易,留下一份鼓励
NgxPupil

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
NgxPupil
这家伙很懒还未留下介绍~
1
文章
0
问答
0
粉丝
相关文章
转载:https://segmentfault.com/a/1190000013075129?utm_source=sf-related  原文作者:Yujiaao前言在与第三方系统进行接口开发时,需要不断的改进和测试,以常见的微信登录支付和Alipay支付和登录为例.相对来讲Alipay做起来容易一些,一是接口SDK封装的简单一些,对老接口也相对友好,文档的岐义少.微信就不那么容易了.出于安全的考虑,微信的商户ID授权回调和支付回调只允许后台配置的一个地址,看上去可以加,但在我有限的经验里,加了也不管用.有时间吐槽,不如花时间想其他办法搞定.借助于万能的nginx反向代理功能,我们就把测试的和正式环境的配置通一个域名地址,但不同参数的方式搞定了.使用场景- 微信的测试假设你和一个正式服务器,如bixuebihui.com,还有一个测试用的,dev.bixuebihui.com,正式的微信回调路径是 https://bixuebihui.com/pay,测试的路径是 https://de
点赞 6
浏览 5k
在评估 Ingress controller 时,您会注意到它们分为三类:开源、默认和商用。在这里学习每种方法的优缺点。访问 NGINX 中文官方开源社区(nginx.org.cn)了解详情。
点赞 2
浏览 14.3k
又是一个热情似火的六月,一年一度的 Microservices June 微服务之月再次回归!微服务之月是 NGINX 一年一度的免费线上教学项目,今年我们将主要关注“微服务交付”的概念和技巧。完成课
点赞 1
浏览 3.6k