全域性 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 模組中,並在需要時在配置中靈活呼叫。