必须启用lua_code_cache off且error_log级别≥notice,否则lua异常堆栈丢失行号;典型报错含“runtime error”和“stack traceback”,需检查文件行号及nil值操作,禁用print而用ngx.log或让异常自然抛出。

直接看 error_log 里带 lua 和 stack traceback 的错误行,重点确认是否启用了调试必需的配置——否则堆栈会丢失行号、定位失准。
检查 Lua 异常是否被完整记录
Nginx 默认不会输出 Lua 堆栈,必须满足两个前提:
- lua_code_cache off:仅开发环境启用;生产环境开启后,Lua 脚本被编译缓存,错误位置会指向编译后的匿名函数,无法对应源码行号
-
error_log 级别 ≥ notice:例如
error_log /var/log/nginx/error.log notice;;设为 info 或 debug 可看到更详细上下文,但 warn 及以下会直接过滤掉 Lua 异常堆栈
若日志中只有 runtime error 但无 stack traceback,大概率是上面任一条件未满足。
识别典型 Lua 报错格式与关键信息
正常捕获的 Lua 异常长这样:
2026/09/03 17:22:15 [error] 12345#0: *678 lua entry thread aborted: runtime error: /usr/local/openresty/nginx/lua/auth.lua:12: attempt to index a nil value (field 'token')
stack traceback:
coroutine 0:
/usr/local/openresty/nginx/lua/auth.lua:12: in function
- 第一行末尾的
/auth.lua:12是出错的具体文件和行号,优先检查该行变量是否未初始化或取值为空 -
attempt to index a nil value类型错误最常见,说明对 nil 做了.xxx或[xxx]操作 -
stack traceback中的in function <1></1>
-
& -
-











