lua-nginx-module 配置指令详解
本文档详细列出 lua-nginx-module 的所有配置指令,供 lolly 项目参考实现。
一、初始化类指令 (Initialization Phase)
| 指令 |
参数类型 |
配置层级 |
执行时机 |
Nginx Phase |
init_by_lua |
inline script |
main |
Master 进程启动时 |
配置加载阶段 |
init_by_lua_block |
block |
main |
Master 进程启动时 |
配置加载阶段 |
init_by_lua_file |
file path |
main |
Master 进程启动时 |
配置加载阶段 |
init_worker_by_lua |
inline script |
main |
Worker 进程启动时 |
worker 初始化 |
init_worker_by_lua_block |
block |
main |
Worker 进程启动时 |
worker 初始化 |
init_worker_by_lua_file |
file path |
main |
Worker 进程启动时 |
worker 初始化 |
exit_worker_by_lua_block |
block |
main |
Worker 进程退出时 |
worker 退出 |
exit_worker_by_lua_file |
file path |
main |
Worker 进程退出时 |
worker 退出 |
使用示例
# init_by_lua - 初始化 Lua VM,加载共享模块
init_by_lua_block {
require "resty.core"
local cache = require "myapp.cache"
cache.init()
}
# init_worker_by_lua - Worker 级初始化(如定时任务)
init_worker_by_lua_block {
local timer = require "myapp.timer"
timer.start_heartbeat()
}
# exit_worker_by_lua - Worker 退出清理
exit_worker_by_lua_block {
local cleanup = require "myapp.cleanup"
cleanup.flush_pending_data()
}
二、变量设置类指令 (Variable Phase)
| 指令 |
参数类型 |
配置层级 |
执行时机 |
set_by_lua |
inline script + args |
server/if/location |
变量赋值时 |
set_by_lua_block |
block |
server/if/location |
变量赋值时 |
set_by_lua_file |
file path + args |
server/if/location |
变量赋值时 |
特点
- 同步执行: 不能 yield,必须立即返回
- 返回值: 通过
return 返回结果赋给变量
- 参数传递: 支持额外参数传递给 Lua 代码
使用示例
location /set {
set $res "";
set_by_lua_block $res {
local a = tonumber(ngx.arg[1])
local b = tonumber(ngx.arg[2])
return a + b
} $arg_a $arg_b;
return 200 "Result: $res";
}
三、请求处理类指令 (Request Handling Phases)
3.1 Server Rewrite Phase
| 指令 |
参数类型 |
配置层级 |
server_rewrite_by_lua_block |
block |
main/server |
server_rewrite_by_lua_file |
file path |
main/server |
3.2 Rewrite Phase
| 指令 |
参数类型 |
配置层级 |
rewrite_by_lua |
inline script |
main/server/location/if |
rewrite_by_lua_block |
block |
main/server/location/if |
rewrite_by_lua_file |
file path |
main/server/location/if |
3.3 Access Phase
| 指令 |
参数类型 |
配置层级 |
access_by_lua |
inline script |
main/server/location/if |
access_by_lua_block |
block |
main/server/location/if |
access_by_lua_file |
file path |
main/server/location/if |
3.4 Precontent Phase
| 指令 |
参数类型 |
配置层级 |
precontent_by_lua_block |
block |
main/server/location/if |
precontent_by_lua_file |
file path |
main/server/location/if |
3.5 Content Phase
| 指令 |
参数类型 |
配置层级 |
content_by_lua |
inline script |
location/if |
content_by_lua_block |
block |
location/if |
content_by_lua_file |
file path |
location/if |
3.6 Log Phase
| 指令 |
参数类型 |
配置层级 |
log_by_lua |
inline script |
main/server/location/if |
log_by_lua_block |
block |
main/server/location/if |
log_by_lua_file |
file path |
main/server/location/if |
阶段执行顺序
请求进入
↓
server_rewrite_by_lua*
↓
rewrite_by_lua*
↓
access_by_lua*
↓
precontent_by_lua*
↓
content_by_lua*
↓
header_filter_by_lua* → body_filter_by_lua*
↓
log_by_lua*
四、过滤类指令 (Filter Phase)
| 指令 |
参数类型 |
配置层级 |
说明 |
header_filter_by_lua |
inline script |
main/server/location/if |
响应头过滤 |
header_filter_by_lua_block |
block |
main/server/location/if |
响应头过滤 |
header_filter_by_lua_file |
file path |
main/server/location/if |
响应头过滤 |
body_filter_by_lua |
inline script |
main/server/location/if |
响应体过滤 |
body_filter_by_lua_block |
block |
main/server/location/if |
响应体过滤 |
body_filter_by_lua_file |
file path |
main/server/location/if |
响应体过滤 |
特点
- 同步执行: 不能 yield
- ngx.arg 访问:
ngx.arg[1] 数据块, ngx.arg[2] EOF 标记
五、负载均衡类指令 (Upstream/Balancer)
| 指令 |
参数类型 |
配置层级 |
说明 |
balancer_by_lua_block |
block |
upstream |
选择后端服务器 |
balancer_by_lua_file |
file path |
upstream |
选择后端服务器 |
balancer_keepalive |
number |
upstream |
连接池配置 |
六、SSL/TLS 类指令 (SSL Phase)
6.1 服务器端 SSL
| 指令 |
参数类型 |
配置层级 |
执行时机 |
ssl_client_hello_by_lua_block |
block |
main/server |
SSL Client Hello |
ssl_client_hello_by_lua_file |
file path |
main/server |
SSL Client Hello |
ssl_certificate_by_lua_block |
block |
main/server |
SSL 证书阶段 |
ssl_certificate_by_lua_file |
file path |
main/server |
SSL 证书阶段 |
ssl_session_store_by_lua_block |
block |
main/server |
SSL 会话存储 |
ssl_session_store_by_lua_file |
file path |
main/server |
SSL 会话存储 |
ssl_session_fetch_by_lua_block |
block |
main/server |
SSL 会话获取 |
ssl_session_fetch_by_lua_file |
file path |
main/server |
SSL 会话获取 |
6.2 代理 SSL (Proxy SSL)
| 指令 |
参数类型 |
配置层级 |
proxy_ssl_certificate_by_lua_block |
block |
location/if |
proxy_ssl_certificate_by_lua_file |
file path |
location/if |
proxy_ssl_verify_by_lua_block |
block |
location/if |
proxy_ssl_verify_by_lua_file |
file path |
location/if |
七、配置控制类指令
| 指令 |
参数类型 |
配置层级 |
默认值 |
说明 |
lua_code_cache |
on/off |
main/server/location/if |
on |
Lua 代码缓存开关 |
lua_need_request_body |
on/off |
main/server/location/if |
off |
强制读取请求体 |
lua_transform_underscores_in_response_headers |
on/off |
main/server/location/if |
on |
转换下划线为连字符 |
lua_socket_log_errors |
on/off |
main/server/location/if |
on |
socket 错误日志 |
八、Lua 环境配置指令
| 指令 |
参数类型 |
配置层级 |
说明 |
lua_package_path |
path |
main |
Lua 模块搜索路径 |
lua_package_cpath |
path |
main |
Lua C 模块搜索路径 |
lua_shared_dict |
name size |
main |
共享内存字典 |
lua_regex_cache_max_entries |
number |
main |
正则缓存条目数(默认1024) |
lua_regex_match_limit |
number |
main |
正则匹配限制 |
lua_max_pending_timers |
number |
main |
最大挂起定时器数(默认1024) |
lua_max_running_timers |
number |
main |
最大运行定时器数(默认256) |
lua_thread_cache_max_entries |
number |
main |
线程缓存条目数 |
lua_worker_thread_vm_pool_size |
number |
main |
Worker 线程 VM 池大小(默认10) |
九、Socket 配置指令
| 指令 |
参数类型 |
配置层级 |
默认值 |
说明 |
lua_socket_keepalive_timeout |
time |
main/server/location/if |
60s |
连接保活超时 |
lua_socket_connect_timeout |
time |
main/server/location/if |
60s |
连接超时 |
lua_socket_send_timeout |
time |
main/server/location/if |
60s |
发送超时 |
lua_socket_read_timeout |
time |
main/server/location/if |
60s |
读取超时 |
lua_socket_send_lowat |
size |
main/server/location/if |
0 |
发送低水位 |
lua_socket_buffer_size |
size |
main/server/location/if |
pagesize |
缓冲区大小 |
lua_socket_pool_size |
number |
main/server/location/if |
30 |
连接池大小 |
十、SSL 配置指令
| 指令 |
参数类型 |
配置层级 |
说明 |
lua_ssl_protocols |
[SSLv2|SSLv3|TLSv1...] |
main/server/location |
SSL 协议版本 |
lua_ssl_ciphers |
ciphers |
main/server/location |
SSL 加密套件 |
lua_ssl_verify_depth |
number |
main/server/location |
验证深度 |
lua_ssl_certificate |
path |
main/server/location |
SSL 证书 |
lua_ssl_certificate_key |
path |
main/server/location |
SSL 证书密钥 |
lua_ssl_trusted_certificate |
path |
main/server/location |
可信证书 |
lua_ssl_crl |
path |
main/server/location |
证书吊销列表 |
lua_ssl_key_log |
path |
main/server/location |
SSL 密钥日志 |
lua_ssl_conf_command |
key value |
main/server/location |
SSL 配置命令 |
十一、其他指令
| 指令 |
参数类型 |
配置层级 |
默认值 |
说明 |
lua_load_resty_core |
on/off |
main |
- |
加载 resty.core (已废弃) |
lua_capture_error_log |
size |
main |
- |
错误日志捕获 |
lua_sa_restart |
on/off |
main |
on |
SA_RESTART 信号处理 |
lua_http10_buffering |
on/off |
main/server/location/if |
on |
HTTP/1.0 缓冲 |
lua_check_client_abort |
on/off |
main/server/location/if |
off |
检测客户端中断 |
lua_use_default_type |
on/off |
main/server/location/if |
on |
使用默认 Content-Type |
指令参数类型说明
| 类型 |
说明 |
示例 |
| inline script |
直接嵌入 Lua 代码字符串 |
content_by_lua "ngx.say('hello')"; |
| block |
使用 { } 包裹的 Lua 代码块 |
content_by_lua_block { ngx.say('hello') } |
| file path |
外部 Lua 文件路径 |
content_by_lua_file /path/to/script.lua; |
| time |
时间值,支持单位 (s/ms) |
60s, 5000ms |
| size |
大小值,支持单位 (k/m/g) |
10m, 1g |
| path |
文件系统路径 |
/usr/local/openresty/lualib |