实时黑名单系统,如果用php脚本实现很容易,但是效率惨不忍睹呀。
要想速度快还的在nginx层实现阻塞。如果iptables 层阻塞速度更快,但是黑名单列表如果有更新就必须要重载配置,实现还是有难度的。php管理后台把黑名单ip写入到redis,nginx层使用lua脚本去redis查询ip是否在黑名单里,实现实时控制。
OpenResty就是嵌入了LuaJIT VM的Nginx,LuaJIT即采用C语言写的Lua代码的解释器。熟悉简单的Lua语言和nginx基础知识就可以上手开发简单功能了。
你可以单独安装OpenResty,如果是宝塔面板也可以直接切换版本 nginx openresty
直接上代码。
整个系统的瓶颈在redis,我们要优化redis连接,需要连接池。
lua_shared_dict my_cache 10m;
server
{
.........
先创建一个内存缓存区,名称:my_cache 容量:10m
ngx+lua 中没有全局变量我们需要把redis的链接函数存储到这个 my_cache 里面使用其他地方使用的时候直接读取缓存里的函数代码,再运行函数得到一个redis连接
local my_cache = ngx.shared.my_cache
local redis_connect_code = my_cache:get("redis_connect")
if not redis_connect_code then
local function redis_