https错误页定制需在listen 443 ssl块内独立配置error_page,确保资源用相对协议或绝对路径加载防混合内容,反向代理须启用proxy_intercept_errors并透传动态参数。

HTTPS 错误页面定制和 HTTP 基本一致,但需额外注意 SSL 层面的安全约束与协议一致性。核心仍是 error_page 指令,但配置时要兼顾证书、重定向逻辑和资源加载安全。
HTTPS 下 error_page 必须写在 server { listen 443 ssl; } 块内
不能只在 HTTP server 块里配,否则 HTTPS 请求触发的错误(如 502、404)不会命中。每个启用 SSL 的 server 块都应独立配置 error_page:
- 确保
listen 443 ssl;已声明,且证书路径正确 - 把
error_page 404 /404.html;等指令直接放在该 server 块中 - 若同时有 HTTP 和 HTTPS 站点,两个 server 块都要分别配,不可共用
HTTPS 错误页资源必须用安全协议加载
页面里的 CSS、JS、图片等资源若仍用 http://,浏览器会拦截并显示空白或警告(混合内容)。正确做法是:
- 全部改用协议相对地址:
src="//cdn.example.com/js/app.js" - 或使用绝对路径(推荐):
src="/js/app.js",由 Nginx 静态服务 - 避免在 HTML 中硬编码
http://或https://,尤其不要写死 http
反向代理场景下必须开启 proxy_intercept_errors
当 Nginx 作为 HTTPS 入口,后端(如 Node.js/Python)挂掉返回 502/503 时,默认不拦截——用户看到的是 Nginx 原生白屏错误。解决方法:
- 在对应 location 块中加:
proxy_intercept_errors on; - 配合
error_page 502 503 504 /5xx.html; - 确保
/5xx.html路径可被访问(用root或alias定义)
支持动态信息透传(如原请求 URL、错误码)
HTTPS 不影响变量使用。可在 error_page 后拼接查询参数,让错误页更友好:
- 例如:
error_page 404 /404.html?uri=$request_uri&code=404; - HTML 中用 JS 读取 URL 参数,显示“您访问的 https://example.com$uri 不存在”
- 注意:参数值需经
escape处理防 XSS,Nginx 内置变量已做基础转义,但拼接外部输入时仍需谨慎











