ProxyErrorOverride仅是开关,不自动接管502/503等代理错误;必须配合ErrorDocument显式配置各状态码的本地页面路径(如/ErrorDocument 502 /errors/502.html),并用ProxyPass /errors/ !排除该路径以防被二次代理。

ProxyErrorOverride 本身不自动接管后端返回的 502/503 等错误页,它只是一个“开关”,真正起作用的是配合 ErrorDocument 显式声明每个状态码对应的本地页面,并确保该路径不被代理规则误转发。
必须显式配置 ErrorDocument 每个目标状态码
ProxyErrorOverride On 只是允许 Apache 用自定义页面替换代理错误,但不会自动绑定任何页面。你得为想接管的每一个 HTTP 状态码单独写 ErrorDocument 指令:
- ErrorDocument 502 /errors/502.html
- ErrorDocument 503 /errors/503.html
- ErrorDocument 504 /errors/504.html
路径必须是以 / 开头的本地 URI(如 /errors/502.html),不能是文件系统绝对路径(如 /var/www/html/errors/502.html),也不能是外部 URL(如 https://example.com/502.html)。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
关键:排除错误页路径,防止被 ProxyPass 二次代理
如果错误页路径(比如 /errors/)也被你的 ProxyPass / http://backend/ 规则覆盖,Apache 会尝试把请求转发给后端,导致 404 或无限循环。解决方法是在同一配置段中加一条排除规则:
- ProxyPass /errors/ !(注意末尾空格和感叹号)
- 确保
/errors/下的 HTML、CSS、JS 都由 Apache 直接提供,不依赖后端服务 - 页面内引用资源请用根路径(如
/errors/style.css),避免相对路径因 URL 上下文错乱而加载失败
确保响应状态码保持原样
自定义错误页返回时,HTTP 状态码必须仍是原始错误码(如 502),否则浏览器可能不按预期渲染错误页。Apache 默认维持原状态码,但如果你在错误页里用了 PHP 或其他动态脚本,需手动设置:
- PHP 中加
http_response_code(502); - 静态 HTML 页面无需额外操作
作用域要匹配,避免指令失效
ProxyErrorOverride 是目录级指令,生效范围取决于所在上下文:
- 写在
<VirtualHost>里,影响整个虚拟主机 - 不要分散写在多个
<Location>里——它不会跨 ProxyPass 边界“穿透”生效 - 若同时有多个 ProxyPass(如
/api/和/admin/),应在同一层级统一开启,例如:ProxyErrorOverride On放在<VirtualHost>开头

















