全局 Lua 模块
全局 Lua 模块是一种强大的机制,用于实现复杂的逻辑功能。
本地配置中的 Lua 模块以 .lua
作为文件扩展名,而非 .yaml
,并且必须存放在配置目录下名为 global_lua_modules
的专用文件夹中。
目录结构
Lua 模块的目录结构如下所示:
|-- global_lua_modules/
|-- hello.lua
|-- world.lua
|-- ...
同步机制
如果 global_lua_modules
目录不存在,命令行工具将不会检查全局 Lua 模块的变更。
当 OpenResty Edge 启用"自动同步到其他分区"功能时,即使本地配置中的全局 Lua 模块与 OpenResty Edge 中的不一致,命令行工具也不会删除 OpenResty Edge 中现有的全局 Lua 模块。
然而,当禁用"自动同步到其他分区"功能时,命令行工具会删除那些存在于 OpenResty Edge 中但不存在于本地配置目录的 Lua 模块。
使用示例
更新配置到 OpenResty Edge 中:
edge-config https://192.168.1.1 -s -t 2051e780-1897-4ea0-92b4-2c2f0169aa94 -l global_lua_modules -i /root/oredge-configs
从 OpenResty Edge 中导出配置:
edge-config -u https://192.168.1.1 -s -t 2051e780-1897-4ea0-92b4-2c2f0169aa94 -E -l global_lua_modules
示例中均使用 -l global_lua_modules
来指定只导入/导出全局 Lua 模块相关的配置。
配置示例
下面我们通过一个简单的例子来说明如何创建和使用全局 Lua 模块:
- 首先,创建一个名为
hello.lua
的 Lua 模块:
local _M = {}
function _M.go()
ngx.say("hello")
end
return _M
- 然后,在页面规则中调用这个
hello
Lua 模块:
- enable_rule: true
actions:
"user-code":
el: |-
{
true =>
foreign-call(module: "hello", func: "go"),
done;
}
comment: ''
在这个例子中,我们定义了一个简单的 Lua 模块 hello.lua
,其中包含一个名为 go
的函数,用于输出 “hello”。随后,我们在页面规则的配置中通过表达式语言调用了这个模块和函数。
通过这种方式,您可以轻松地将复杂的逻辑封装在 Lua 模块中,并在需要时在配置中灵活调用。