加权轮询下配置自定义错误页需四步:在 proxy_pass 同级 location 中开启 proxy_intercept_errors on;配置 error_page 指向内部 URI;用 location = /path { internal; root ... } 承接并防止套娃;确保文件存在、权限正确且大小≥512字节。

在加权轮询(weight)场景下配置自定义错误页,本质仍是标准的 error_page 机制,但关键在于:**错误页必须在反向代理上下文中生效,且需明确开启拦截开关**。加权轮询本身不改变错误处理逻辑,只影响请求分发策略;真正决定能否显示自定义页的,是后端返回错误时 Nginx 是否“接得住”。
加权 upstream 中必须启用 proxy_intercept_errors
默认情况下,Nginx 会把后端(如 Tomcat、Node.js)返回的 502/503/504 等状态码原样透传给客户端,不会触发 error_page。必须显式开启拦截:
- 在
upstream对应的location块内添加:proxy_intercept_errors on; - 不能只写在
server或http块顶层——它必须作用于实际发起代理请求的位置 - 若同时用 FastCGI(如 PHP),还需加
fastcgi_intercept_errors on;
error_page 要放在 location 块里,和 proxy_pass 同级
加权轮询由 upstream 定义,但错误响应发生在具体 location 代理过程中。配置必须紧贴业务路径:
- 错误页指令要写在包含
proxy_pass的location内,例如:location /api/ {<br> proxy_pass http://backend_cluster;<br> proxy_intercept_errors on;<br> error_page 502 503 504 /50x.html;<br>} - 不要写在
upstream块里——语法不支持 - 若整个 server 都走同一套后端,可放在
location /下;若不同路径有不同后端或错误页,就下沉到对应 location
承接页面的 location = /50x.html 必须带 internal 和正确 root
error_page 502 /50x.html 是内部跳转,不是文件路径。必须用精确匹配的 location = 来承接,并确保文件可读:
- 示例:
location = /50x.html {<br> root /usr/share/nginx/html;<br> internal;<br>} - 真实路径是
/usr/share/nginx/html/50x.html,不是/50x.html或/usr/share/nginx/html/50x.html直接硬编码 -
internal不可省略——防止用户直接访问/50x.html导致“404 套娃” - 确认该 HTML 文件大小 ≥ 512 字节(兼容旧浏览器),且服务器已加载
mime.types或显式声明types { text/html html; }
加权轮询不影响错误页内容,但影响错误触发时机
加权轮询本身不参与错误渲染,但它会影响哪些节点可能返回错误:
- 如果某台权重高的后端频繁 502,那这个错误会更常被代理到,从而更频繁地触发你的自定义页
- 若想对特定节点失败做差异化处理(如某台挂了就切静态兜底页),需结合
proxy_next_upstream和健康检查,而非仅靠 error_page - 错误页内容本身无需感知权重——它只是统一响应体,和上游节点数量、权重值无关


















