源站进程一挂掉,502 错误页就只剩几行黑字,logo 和样式全部丢失,用户还以为进了钓鱼站,直接关掉页面。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

location = /50x.html {
    root /data/static;
    internal;
}

错误页引用了站内的 css 和图片,这些请求同样会落到已经挂掉的后端上,错误页自己也加载不完整,等于这个错误页根本没做。这一点先确认清楚,后面就不用反复试。

「错误页依赖源站」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。

具体做法是,错误页的样式直接内联,或者放到独立的静态域名上面;图片换成 data URI 内联,实在不行干脆只用纯文字来排版;错误页文件放到不经过后端的那份静态目录里面。

改完照着核一遍,把后端停掉之后错误页样式仍然完整,刷新也不会出现裂图。

作者 9823189