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