Nginx中error_page可置于server块内实现虚拟主机级错误页面隔离。支持多状态码、外部重定向及location内覆盖,需配合internal、root/alias和权限配置确保安全与正确响应。

在 Nginx 中,error_page 指令可以放在 server 块内,实现该虚拟主机独立的错误页面处理,无需全局配置或影响其他站点。
server 块内 error_page 的基本用法
每个 server 块可单独定义自己的错误响应行为。只要把 error_page 放在对应 server 里,它就只对该域名或监听端口生效。
- 语法示例:
error_page 404 /404.html;
表示当该 server 返回 404 时,内部重定向到本地的/404.html(路径相对于root或alias) - 支持多个状态码:如
error_page 404 500 502 /error.html; - 支持重定向到外部 URL:
error_page 403 https://example.com/forbidden;(注意需加协议头,且会返回 302)
配合 location 处理自定义错误页资源
若错误页是静态文件(如 /404.html),需确保 Nginx 能正确提供该文件。推荐显式用 location 匹配并设置权限:
- 添加如下配置防止错误页被代理或执行:
location = /404.html {<br> internal;<br> root /usr/share/nginx/html;<br>} -
internal关键字很重要——它禁止用户直接访问/404.html,只允许内部error_page重定向使用,提升安全性 -
root值应与主server的root一致,或明确指定路径;也可用alias精确映射
注意作用域和继承关系
error_page 在 server 块中定义时,不会被子 location 继承,除非 location 内未覆盖。但 location 可以重新定义自己的 error_page,优先级更高:
- server 级定义:
error_page 500 /500-main.html; - 某个 location 内覆盖:
location /api/ {<br> error_page 500 /500-api.html;<br> proxy_pass http://backend;<br>}
此时 API 接口出错将返回/500-api.html,而非主页面的/500-main.html - 若 location 中未设
error_page,则回退使用 server 级配置
常见问题与建议
实际配置中容易忽略几个细节:
- 错误页文件必须真实存在,且 Nginx 进程有读取权限,否则返回空白或默认错误页
- 使用
root时路径拼接规则为:root + URI;用alias则是替换整个匹配路径,注意末尾斜杠一致性 - 调试技巧:临时去掉
internal,用浏览器直接访问错误页路径(如http://site/404.html),确认能正常加载 - 如需记录错误页触发日志,可在对应 location 中加
access_log /var/log/nginx/error_404.log;










