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