执行流程配置指令
对应于一个Web应用程序的生命周期,OpenResty中提供了11个流程配置阶段,我们的Lua代码就是围绕这11个阶段展开编写的,这篇笔记我们对这些概念进行介绍。
11个流程阶段
对于一个Web服务端应用程序,它的生命周期大致可以分为三部分:
- 初始化:读取配置文件,初始化程序所需的数据,绑定Socket套接字并开始监听
- 运行:服务端程序接受用户请求,返回响应信息
- 关闭:执行必要的清理工作,释放占用的资源
针对初始化阶段和运行阶段,OpenResty提供了11个执行流程阶段配置,我们在这11个阶段中可以注入Lua代码,实现我们的业务逻辑功能。
| 流程阶段 | Nginx配置块 | 说明 |
|---|---|---|
| init_by_lua | http |
master进程初始化阶段,用于初始化全局配置或模块 |
| init_worker_by_lua | http |
worker进程初始化阶段,可用于初始化worker进程专用功能 |
| ssl_certificate_by_lua | server |
SSL握手阶段,可用于设置安全证书 |
| set_by_lua | server、location |
Nginx处理URL重写阶段,可用于设置Nginx变量 |
| rewrite_by_lua | server、location |
Nginx处理URL重写阶段,可用于改写URL |
| access_by_lua | server、location |
产生响应之前的接入阶段,可实现访问控制、接口限流等 |
| content_by_lua | server、location |
请求处理阶段,大部分业务逻辑在此实现 |
| balancer_by_lua | upstream |
请求处理阶段,用于反向代理时选择后端服务器 |
| header_filter_by_lua | server、location |
响应后处理阶段,加工处理响应头 |
| body_filter_by_lua | server、location |
响应后处理阶段,加工处理响应体 |
| log_by_lua | server、location |
Log阶段,主要用于记录日志等 |
这11个流程阶段的流程关系如下图所示。

合理组合使用这11个流程阶段,我们就可以把复杂的业务逻辑拆分成若干简单的模块,实现高内聚、低耦合的Web应用程序。
在流程阶段中注入Lua代码
流程阶段的配置指令通常有三种形式:
- xxx_by_lua:执行字符串形式的Lua代码,字符串长度有限制,不推荐使用
- xxx_by_lua_block:功能同上,但执行的是
{ ... }块内的Lua代码 - xxx_by_lua_file:执行Lua文件
三种配置方式中,第一种是OpenResty早期提供的,有很多限制,不推荐使用。实际开发中,对于非常简单的代码,我们可以将其内嵌在Nginx配置文件中,但这样做的缺点是耦合度较高,对于更复杂的代码,我们一般采用指定Lua文件的方式。
Nginx配置文件内嵌Lua代码写法如下。
content_by_lua_block {
ngx.print("Hello, world!")
}
分离的Nginx配置指令和Lua源代码文件写法如下。
content_by_lua_file 'service/hello.lua';
ngx.print('Hello, world!')
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。