微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐