在 Nginx 的 http 块中配置 error_page 可实现全站统一错误页面处理,支持多级继承(http→server→location),默认向下继承但可被覆盖;可配合 location 和 return 改写状态码,路径解析依赖 root,需避免循环错误和混合内容问题。
在 Nginx 的
块中配置
,可以实现**全站统一的错误页面处理**,比如所有 404、500 错误都跳转到同一个自定义页面。这种方式比在每个
块里重复配置更简洁、易维护。
作用范围与继承规则
指令支持多级作用域:http → server → location。在
块中定义的
会默认继承给所有下属
和
,但可被下层同名配置覆盖。
若某
块未定义 404 处理,就使用
块中的全局配置
若该
显式写了
,则以它为准
注意:
只改变响应行为,不改变 HTTP 状态码(除非配合
或内部重定向)
基本写法:重定向到静态页面
在
块内添加如下配置,将常见错误映射到统一 HTML 文件:
}
上面配置要求服务器上存在
这类文件。Nginx 会以内部重定向方式返回该文件,状态码仍为原始错误码(如 404)。
进阶用法:返回自定义状态码 + 页面
如果希望把 404 统一转成 200 状态并显示友好页(SEO 或 SPA 路由场景),需配合
块和
或
:
}
关键点:
防止用户绕过错误逻辑直接请求
;
显式改写状态码;若用
,确保 fallback 文件存在且路径正确。
注意事项与常见问题
路径解析依赖 root
:
中的
是 URI 路径,Nginx 会结合当前
或
块的
拼出真实文件路径
避免循环
:不要让错误页本身触发相同错误(例如 404 页面又引用了不存在的 CSS),否则可能返回空白或 500
日志中仍记录原始状态码
:access log 显示的是客户端收到的状态码(如 404),不是你
改写的那个
HTTPS 站点需确保错误页资源也走 HTTPS
,尤其是内嵌图片、JS 时,避免混合内容警告
httperror_pageservererror_pagehttperror_pageserverlocationserverhttpservererror_page 404 /404-custom.htmlerror_pagereturnhttphttp {
# 全局错误页(路径相对于 root 或 alias 设置)
error_page 404 /error/404.html;
error_page 500 502 503 504 /error/5xx.html;
error_page 403 /error/403.html;
# 确保这些路径能被正确访问(建议配一个通用 root)
root /usr/share/nginx/html;
/usr/share/nginx/html/error/404.htmllocationreturntry_fileshttp {
error_page 404 @notfound;
location @notfound {
internal; # 仅限内部跳转,禁止外部直接访问
return 200 '页面找不到了~
';
# 或返回静态文件:
# root /usr/share/nginx/html;
# try_files /error/spa-index.html =404;
}internal@notfoundreturn 200try_fileserror_page 404 /xxx.html/xxx.htmlserverhttprootreturn