Nginx反向代理设置黑名单


Nginx反向代理设置黑名单

作为架构师,你必须掌握 openresty

Openresty设置访问黑名单

1、简单设置nginx配置文件

(py36env) [root@www conf]# ll nginx.conf    配置新的location

              location /bklist {

                  access_by_lua_block {

                         local blacklist = {

                                [‘192.168.1.118’] = true   //true黑名单,false白名单

                            }

                            if blacklist[ngx.var.remote_addr] then

                                return ngx.exit(ngx.HTTP_FORBIDDEN)

                            end

                     }

                     content_by_lua_block {

                         ngx.say(ngx.var.remote_addr)

                     }

              }

(py36env) [root@www conf]# /usr/local/openresty/nginx/sbin/nginx -s reload

(py36env) [root@www ~]# curl 192.168.1.118/bklist  -I   访问403拒绝

HTTP/1.1 403 Forbidden

 

2、通过lua脚本设置访问

设置lua脚本,动态设置黑白名单,拆分ng配置信息,

(py36v) [root@www ~]# cat /usr/local/openresty/nginx/conf/nginx.conf  配置ng

              location /bklist {

                  access_by_lua_file ../luajit/blacklist_v2.lua;

                     content_by_lua_block {

                         ngx.say(ngx.var.remote_addr)

                     }

              }

(py36env) [root@www ~]# cat /usr/local/openresty/luajit/blacklist.lua

local blacklist = {

        [‘192.168.1.118’] = false

}

if blacklist[ngx.var.remote_addr] then

        return ngx.exit(ngx.HTTP_FORBIDDEN)

end

(py36env) [root@www ~]#

 

3、通过lua脚本设置访问控制

通过redis实现动态,添加删除白名单。

Nginx配置加载lua文件。

                location /bklist {

                        access_by_lua_file ../luajit/blacklist.lua;

                        content_by_lua_block {

                            ngx.say(ngx.var.remote_addr)

                        }

                }

(py36env) [root@www ~]# cat /usr/local/openresty/luajit/blacklist.lua

local blacklist = {

        [‘192.168.1.118’] = false

}

if blacklist[ngx.var.remote_addr] then

        return ngx.exit(ngx.HTTP_FORBIDDEN)

访问请求,

(py36env) [root@www ~]# curl 192.168.1.118/bklist

192.168.1.118

 (py36env) [root@www ~]# curl 192.168.1.118/bklist -I

HTTP/1.1 200 OK

 

3、通过lua脚本设置访问控制

(py36env) [root@www ~]# cat /usr/local/openresty/nginx/conf/nginx.conf

                location /bklist {

                        access_by_lua_file ../luajit/blacklist_v2.lua;

                        content_by_lua_block {

                            ngx.say(ngx.var.remote_addr)

                        }

                }

(py36env) [root@www ~]# cat /usr/local/openresty/luajit/blacklist_v2.lua

local redis = require “resty.redis”

local red = redis:new()

 

local ok, err = red:connect(‘127.0.0.1’, 6379)

 

if not ok then

    ngx.log(ngx.INFO, “err:” ..err)

end

 

local ipaddr = ngx.var.remote_addr

 

local exists, err = red:sismember(“black_list”, ipaddr)

if err then

    return ngx.exit(“interval err..”)

end

 

if exists == 1  then

    return ngx.exit(ngx.HTTP_FORBIDEN)

redis操作黑名单key,全程热加载到ng。

Redis Sadd 命令将一个或多个成员元素加入到集合中,已存在集合的成员元素将被忽略。

假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。

当集合 key 不是集合类型时,返回一个错误。

注意:在 Redis2.4 版本以前, SADD 只接受单个成员值。

(py36env) [root@www ~]# redis-cli

127.0.0.1:6379> SADD black_list 192.168.1.118   #添加成员

127.0.0.1:6379> SADD black_list 192.168.1.102

127.0.0.1:6379> SMEMBERS black_list   #查看成员

1) “192.168.1.102”

2) “192.168.1.118”

127.0.0.1:6379> SREM black_list 192.168.1.118  #删除成员

加入黑名单之后,访问变500.

[root@localhost ~]# curl 192.168.1.118/bklist  -I

HTTP/1.1 500 Internal Server Error

参考链接:https://www.bilibili.com/video/BV1Ra411Y7hn?spm_id_from=333.337.search-card.all.click&vd_source=641f16f92229b0afdb36cbc42e671cc0

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/273911.html

(0)
上一篇 2022年7月13日 00:22
下一篇 2022年7月13日 00:22

相关推荐

发表回复

登录后才能评论