openresty 联动 ip封阻
时间: 2025-02-17 15:17:43 浏览: 44
### 使用 OpenResty 实现 IP 封禁配置和管理
#### 一、环境准备
确保已安装并正确配置好 OpenResty 和 Redis。当访问配置好的站点IP,页面显示“Welcome to OpenResty!”表明OpenResty已经成功安装及配置[^2]。
#### 二、基于 Nginx+Lua+Redis 架构实现 IP 黑名单功能
选择此架构来管理和共享黑名单数据,提高系统的灵活性与效率。所有操作均在内存中完成,因此速度极快[^4]。
#### 三、编写 Lua 脚本处理请求
创建一个名为 `ip_blacklist.lua` 的文件,在其中加入如下代码:
```lua
local redis = require "resty.redis"
function block_ip()
local red = redis:new()
-- 连接至本地的 Redis 数据库,默认端口为6379
red:set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
ngx.say("failed to connect: ", err)
return
end
-- 获取客户端真实IP地址
local client_ip = ngx.var.remote_addr
-- 查询该IP是否存在于黑名单集合内
local res, err = red:sismember("blacklist_ips", client_ip)
-- 断开连接
red:close()
if tonumber(res)==1 then
-- 如果存在,则返回HTTP状态码403表示拒绝服务
ngx.exit(ngx.HTTP_FORBIDDEN)
else
-- 否则继续执行后续逻辑
ngx.exec("@default")
end
end
```
这段脚本实现了对传入请求的拦截检查,一旦发现来自被封锁列表中的IP就会立即终止会话并向其发送错误响应消息;反之则放行正常流程[^1]。
#### 四、修改 Nginx 配置文件集成 Lua 处理器
编辑 `/usr/local/openresty/nginx/conf/nginx.conf` 文件,在http块下新增location匹配规则,并指定上述自定义模块作为处理器:
```nginx
http {
...
server{
listen 80;
server_name localhost;
location / {
access_by_lua_file '/path/to/ip_blacklist.lua';
root html;
index index.html index.htm;
}
}
...
}
```
这样每当有新的 HTTP 请求到达时都会先经过 Lua 编写的过滤机制再决定是否给予通行许可[^3]。
阅读全文
相关推荐
















