开发自定义 Lua 插件
自定义 Lua 插件可以在请求/响应生命周期的不同阶段执行自定义逻辑,从而扩展 API7 网关功能。本指南将带你创建一个简单的 Lua 插件,在 API7 网关中注册该插件,并将其应用到路由。
前置条件
- 具备 Lua 编程语言基础知识。
- 熟悉 OpenResty 和 NGINX 请求生命周期。
- 能够访问 API7 网关实例及其控制台。
- 从控制台获取 Token。
插件结构
Lua 插件是一个导出 table 的模块,其中包含配置 Schema、优先级和阶段处理函数。
标准字段
每个插件都应定义以下字段:
name:插件的唯一名称。version:插件版本。priority:决定同一阶段内插件的执行顺序,优先级越高越先执行。schema:定义插件配置参数的 JSON Schema 。
执行阶段
API7 网关先完成路由匹配,然后执行该路由上配置的插件。路由匹配和插件的 rewrite 阶段都发生在 NGINX 的 access 处理过程中。即使请求未匹配任何路由,全局规则仍可能执行,随后网关返回 404。
之后,API7 网关按以下顺序执行插件阶段:
rewrite:路由匹配后的第一个插件阶段。可以修改发往上游的请求,例如 URI 或请求头,但不会使 APISIX 重新匹配路由。access:主要处理阶段,例如身份认证和限流。before_proxy:在 access 阶段之后、请求代理到上游之前执行。header_filter:修改响应头。body_filter:修改响应体。log:响应发送给客户端后记录日志。
分步开发
1. 创建插件文件
为插件新建 Lua 文件。本示例使用名为 custom-header 的插件。