全局 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 模块:

  1. 首先,创建一个名为 hello.lua 的 Lua 模块:
local _M = {}

function _M.go()
    ngx.say("hello")
end

return _M
  1. 然后,在页面规则中调用这个 hello Lua 模块:
- enable_rule: true
  actions:
    "user-code":
      el: |-
        {
        true =>
            foreign-call(module: "hello", func: "go"),
            done;
        }
  comment: ''

在这个例子中,我们定义了一个简单的 Lua 模块 hello.lua,其中包含一个名为 go 的函数,用于输出 “hello”。随后,我们在页面规则的配置中通过表达式语言调用了这个模块和函数。

通过这种方式,您可以轻松地将复杂的逻辑封装在 Lua 模块中,并在需要时在配置中灵活调用。