在 OpenResty Edge 中通过 Edgelang 调用 Lua 模块

💡 原文中文,约2300字,阅读约需6分钟。
📝

内容提要

本视频教程教您使用 Edge 语言在 OpenResty Edge 的页面规则中调用定制的 Lua 模块。通过这种方法,您能够轻松地完成复杂的网关操作和计算。创建一个 Lua 模块,然后在全局配置页面中添加该模块。在 HTTP 应用程序中调用 Lua 模块,可以通过添加页面规则来实现。验证调用 Lua 模块的效果,可以使用 curl 命令行工具发送 HTTP 请求。OpenResty Edge 是适合微服务和分布式流量的全能型网关软件。

🔎

延伸解读

Lua 模块的全局分发机制

在全局配置中创建的 Lua 模块,保存后会自动分发到每个网关服务器,无需手动逐台部署。这意味着模块更新后,所有节点能快速获得一致版本,降低了配置漂移的风险。但需注意,模块本身不会自动生效,仍需通过页面规则引用并发布新版本,才能让调用逻辑真正运行在流量路径上。

页面规则中的执行顺序与跳过逻辑

教程强调调用 Lua 模块的规则应放在任何现有正常规则之前运行,并明确设置匹配后跳过后续规则。这在实际网关配置中很关键:如果顺序靠后,请求可能先被反向代理等规则处理,导致 Lua 逻辑无法按预期执行。跳过后续规则则能立即终止处理,避免不必要的动作叠加,适合需要快速返回计算结果的场景。

配置发布与验证方式

修改页面规则后必须发布新版本,才能将配置同步到所有网关服务器。文章指出这一过程不需要服务器重载、重启或二进制升级,因此变更效率较高。验证时使用 curl 向网关发送带 URI 参数的请求,通过观察返回的 md5 值随参数变化,可以确认 Lua 模块确实被调用并正确计算。

适用场景与能力边界

通过 Edgelang 在页面规则中调用自定义 Lua 模块,适合完成复杂的网关操作和计算,例如文章演示的 md5 计算。这种方式把定制逻辑与页面规则的条件匹配结合起来,扩展了网关的处理能力。但文章未涉及性能开销、错误处理或安全限制,实际使用时需结合自身流量特点评估模块的可靠性与资源消耗。

❓

Q&A

如何在 OpenResty Edge 中创建一个全局 Lua 模块?

进入 Admin Web 控制台的全局配置页面,选择“全局 Lua 模块”,然后可以直接上传 Lua 文件或在编辑框中编写代码。创建后保存,模块会自动分发到每个网关服务器。

在 OpenResty Edge 的 HTTP 应用程序中如何调用 Lua 模块?

在 HTTP 应用程序中添加一个新的页面规则,设置规则条件检查 URI(例如 /test-md5),然后添加动作“使用 EdgeLang”,在编辑框中编写 Edgelang 代码来调用 Lua 模块,并确保该规则在现有规则之前运行。

修改 OpenResty Edge 配置后需要重启服务器吗?

不需要。配置变化发布新版本后会自动同步到所有网关服务器,无需服务器重载、重启或二进制升级,因此非常高效和可扩展。

如何验证 OpenResty Edge 中 Lua 模块的调用效果?

使用 curl 命令行工具向网关服务器发送 HTTP 请求,例如携带 URI 参数 value=test1,然后检查返回的 md5 值;更改参数为 value=test2 后再次请求,可以看到返回的 md5 值发生变化。

OpenResty Edge 的主要用途是什么?

OpenResty Edge 是一款全能型网关软件,最适合微服务和分布式流量,提供页面规则、Web 应用防火墙(WAF)、负载均衡等多种功能。

在页面规则中调用 Lua 模块时,如何确保规则优先执行?

需要确保该规则在任何现有的正常规则之前运行,并可以设置“在匹配此规则时跳过所有后续规则”,以立即停止处理请求。

🏷️

标签

➡️

继续阅读