Nginx反向代理设置黑名单
作为架构师,你必须掌握 openresty
Openresty设置访问黑名单
(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脚本设置访问控制
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 不存在,则创建一个只包含添加的元素作成员的集合。
注意:在 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] 举报,一经查实,本站将立刻删除。