在 OpenResty Edge 中通过 Edgelang 调用 Lua 模块
本文将教您使用 Edge 语言(由 OpenResty Inc. 开发的一种简洁而强大的小语言)在 OpenResty Edge 的页面规则中调用定制的 Lua 模块。通过这种方法,您能够轻松地完成极其复杂的网关操作和计算。
创建一个 Lua 模块
让我们进入 OpenResty Edge 的 Admin Web 控制台。这是我们控制台的样例部署。每个用户都有自己的本地部署。
首先,我们需要创建一个 Lua 模块。
进入到全局配置页面。
选择 “全局 Lua 模块”。
我们在这里创建的 Lua 模块可以被页面规则调用,并且可以尽可能地满足我们复杂的需求。
我们可以直接上传一个 Lua 文件。
或者在编辑框中编写代码。
在这里,我们创建了一个名为 output-md5.lua 的 Lua 文件,它可以计算输入参数的 md5 值。
声明 Lua 模块表 _M
。
现在向该 Lua 模块添加一个名为 calc
的函数,该函数可以计算输入参数的 md5 值。
最后,不要忘记在结尾处返回模块表。
编辑并保存后,Lua 模块将自动分发到每个网关服务器,并且可以由 Edgelang 代码引用。
在 OpenResty Edge 的 HTTP 应用程序中调用 Lua 模块
现在,我们尝试在 OpenResty Edge 的 HTTP 应用程序中调用 Lua 模块。
我们可以继续使用之前的示例应用,test-edge.com。
进入该应用。
我们已经定义了一个页面规则。
该页面规则设置了一个反向代理到预定义的上游。
现在让我们添加一个新的页面规则来调用 Lua 模块。
启用一个规则条件来检查 URI /test-md5
。
看看我们可以选择哪些变量。
选择 “URI”。
我们选择字符串相等运算符。
输入值 /test-md5
,仅匹配根位置。
然后添加一个新动作。
您可以在此处搜索要添加的动作。
搜索 “使用 EdgeLang”。
选择它。
将我们用于调用 Lua 模块的 Edgelang 代码添加到编辑框中,注意我们使用 URI 参数 “value” 作为输入参数。
确保这个规则在任何现有的正常规则之前运行。
确保在匹配此规则时跳过所有后续规则。
这对于此规则并不是必需的。但是,当我们想立即停止处理请求时,最好明确指定。
现在创建这个规则。
像往常一样,需要发布一个新的版本来推送我们刚才的改动。
点击这个按钮。
发布!
新版本现在已经同步到所有的网关服务器上了。
现在,新的页面规则已经被推送到所有的网关集群和服务器。
我们的配置变化不需要服务器重载、重启或二进制升级。所以它是非常高效和可扩展的。
验证调用 Lua 模块的效果
接下来,我们将验证调用 Lua 模块的效果。
在终端上,我们通过 “curl” 命令行工具向此网关服务器发送 HTTP 请求。
这里我们发送一个带有 URI 参数 value=test1
的请求。请注意 value=test1
URI 参数。
运行命令。我们可以获得返回的 md5 值。
现在我们更改 URI 参数。请注意 value=test2
URI 参数。
运行它!可以看到返回的 md5 值已更改。
我们还可以在页面规则开头调用 Lua 模块。
在此处添加 Edgelang 代码。
点击 “编辑” 按钮。
在编辑框中编写 Edgelang 代码。
这跟我们刚才新加的页面规则效果一样。
关于 OpenResty Edge
OpenResty Edge 是一款专为微服务和分布式流量架构设计的全能型网关软件,由我们自主研发。它集流量管理、私有 CDN 构建、API 网关、安全防护等功能于一体,帮助您轻松构建、管理和保护现代应用程序。OpenResty Edge 拥有业界领先的性能和可扩展性,能够满足高并发、高负载场景下的苛刻需求。它支持调度 K8s 等容器应用流量,并可管理海量域名,轻松满足大型网站和复杂应用的需求。
如果你喜欢这个教程,请订阅这个博客网站和我们的 YouTube 频道 或 B 站频道。谢谢!
关于作者
章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。
章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl 等,并编写过 60 多个开源软件库。
关注我们
如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:
翻译
我们提供了英文版原文和中译版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!