全局 Lua 模块
在用 Edgelang 编写自定义的 Edge 规则时,有时会需要调用自定义的 Lua 模块,此时可以通过在 全局 Lua 模块 中增加此 Lua 模块。
1. 创建全局 Lua 模块
下面我们看下如何创建一个全局 Lua 模块,并在 Edgelang 中引用它。
首先点击 全局配置:

然后点击左侧导航栏的 全局 Lua 模块 进入全局 Lua 模块页面。

在这个页面中,会列出已经存在的全局 Lua 模块,点击 新建 Lua 模块 按钮创建一个新模块。

弹出的 新建 Lua 模块 对话框中提供以下配置项:
- 模块名称:填写模块名称,即后续在 Edgelang 中引用时使用的名称。
- 上传 Lua 文件:点击
选择文件直接导入已有的.lua文件,模块名称默认使用文件名。 - Lua 代码:在编辑框中直接编写 Lua 代码,支持开启
Vim 模式进行编辑。 - 启动时运行:开启后,Edge Node 启动时会在每个 worker 进程初始化时调用该模块的
init_worker()函数。注意:启用后,修改该 Lua 模块配置将触发 Edge Node 的优雅重启。此选项于26.6.1-1版本首次引入。

例如,编写一个简单的返回问候语的模块:
local _M = {}
function _M.say_hello()
return "hello world!"
end
return _M
填写完毕后点击 保存 按钮进行保存,Lua 模块会自动下发到每个节点,之后即可在 Edgelang 代码中引用:

true =>
say(foreign-call(module: "custom_lua_module", func: "say_hello"));
2. 同步选项
页面右上方是 同步选项,含义同 全局配置

有点区别的是,当取消选中 自动同步到其他分区 后,全局 Lua 模块除了支持复制所有 Lua 模块到指定分区外,还支持单独复制某一个 Lua 模块到指定分区,让我们点击复制按钮。

然后选择要同步的分区,点击 copy,当前分区的配置就会覆盖指定分区的配置。

3. 修改历史
可以在发布页面查看同一个分区下 Lua 模块的修改历史。让我们点击 发布 按钮

找到对应的发布历史,点击 查看详情

就能看到此次的修改内容

4. 搜索 Lua 模块
使用 全局 Lua 模块 页面中的搜索框筛选当前页面。搜索会同时匹配模块名称和 Lua 代码。
在 Windows 或 Linux 上按 Ctrl+K,在 macOS 上按 Cmd+K,可以打开全局搜索。
全局 Lua 模块搜索结果会显示所属分区,用于区分同名模块。后端搜索还支持分页和分区筛选。
5. 自定义共享内存字典
全局 Lua 模块 页面的 自定义共享内存字典 标签页用于为网关节点定义共享内存字典。每个字典会在网关节点上生成一个指定名称和大小的 nginx lua_shared_dict 共享内存区,同一网关节点的所有 worker 进程共享其中的数据。Lua 代码(例如全局 Lua 模块)通过 ngx.shared.<name> 访问字典。示例请参阅自定义挑战,其中的 Lua 模块把验证码答案存储在 ngx.shared.captcha_store 中。
点击 新建自定义共享内存字典,填写字典的 名字 和 大小,然后点击 保存。在列表中点击 编辑 或 删除 可以修改或删除字典。变更保存后立即生效,无需发布,并会触发网关进程更新(binary upgrade),重启 Edge Node 进程。详见配置变更与进程更新。
共享内存字典按分区配置。该标签页有自己的分区选择框。由于 Lua 模块会使用共享内存字典,该标签页与 Lua 模块 标签页遵循同一个 自动同步到其他分区 选项。选择 default 分区时,两个标签页都会显示该选项:
- 开启该选项时,只能编辑
default分区,在该分区保存的字典会替换其他所有分区的字典。 - 关闭该选项时,每个分区各自保存字典。此标签页没有复制功能,
Lua 模块标签页的复制到其他分区也只复制 Lua 模块,需要在每个用到该字典的分区中分别创建。
开启该选项本身不会复制任何字典。其他分区会在 default 分区下一次保存或删除字典时获得这些字典。在此之前,同步到其他分区的 Lua 模块无法使用只存在于 default 分区的字典。如需立即复制,在 default 分区中点击任一字典的 编辑,不做修改直接点击 保存。
只要保存所作用的任一分区在 通用 页面还有未发布的变更,保存就会失败。请先在 发布 页面发布这些变更。
修改共享内存字典需要 全局 Lua 模块 的写权限,通过 API 路径 partitions/{partition_id}/ngx 保存时还需要 通用 的写权限。更早的版本只需要 通用 的写权限,因此升级后请为管理共享内存字典的用户组授予 全局 Lua 模块 的写权限。
按分区配置共享内存字典在 OpenResty Edge 26.12.1-1 中首次引入。在更早的版本中,所有分区共用同一个字典列表。