跳转至

errorpage


可触发errorpage阶段

阶段 是否可触发error_page 说明
rewrite_by_lua ✅可以 常用于URI重写或拦截非法请求
access_by_lua ✅可以 常用于鉴权、访问控制
content_by_lua ✅可以 只要未输出响应体,状态码仍可变
log_by_lua ❌不可以 响应已发出,阶段太晚
header_filter_by_lua ⚠️通常不用于此目的 原理上可以设置ngx.exit,但副作用大,容易错误
body_filter_by_lua ❌不可以 响应体处理中,不能修改状态码来触发error_page

无法触发error_page

你已经调用了ngx.say()/ngx.print()/ngx.send_headers()(响应头已发送)后再ngx.exit(403)→❌无效
body_filter_by_lua是处理已发送的响应体,此时Nginx状态机不再支持跳转到errorpage
log_by_lua是收尾阶段,仅用于日志记录,不影响响应流程

推荐阶段

场景 推荐阶段 原因
鉴权、IP黑名单 access_by_lua 可精确拦截非法请求,适合403
路由校验、URL检查 rewrite_by_lua 拦截非法路径,适合404
内容生成失败 content_by_lua 返回500或自定义错误码