Skip to content

#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或自定义错误码