以下是我的 nginx 配置片段:
server {
error_page 500 /errors/500.html;
}
当我的应用程序出现 500 错误时,Chrome 只会显示其默认的 500 页面(Firefox 和 Safari 显示空白页)而不是我的自定义错误页面。
我知道该文件存在,因为我可以访问http://server/errors/500.html
并看到该页面。我还可以将文件移动到文档根目录并将配置更改为:
server {
error_page 500 /500.html;
}
并且 nginx 正确地提供页面,所以它看起来不像是服务器上其他配置错误。
我也尝试过:
server {
error_page 500 $document_root/errors/500.html;
}
和:
server {
error_page 500 http://$http_host/errors/500.html;
}
和:
server {
error_page 500 /500.html;
location = /500.html {
root /path/to/errors/;
}
}
没有运气。
这是预期的行为吗?错误页面是否必须存在于文档根目录中,还是我遗漏了一些明显的东西?
更新 1:这也失败了:
server {
error_page 500 /foo.html;
}
when确实存在于文档根目录中。几乎看起来像是其他东西正在覆盖我的配置,但这个块是引用该指令foo.html
的唯一位置。/etc/nginx/*
error_page
还有其他地方可以设置 nginx 配置吗?
答案1
尝试添加
proxy_intercept_errors on;
或者
fastcgi_intercept_errors on;
在服务器块中取决于您的配置。
这种配置工作正常:
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/static/pages;
}
答案2
尝试这个:
服务器 { error_page 500 =200 /errors/500.html; }
这应该会发送 http 状态 200,这样浏览器就会显示您的页面。使用默认状态(即 500),浏览器可能会显示自己的错误页面并忽略您的内容,即使它是由服务器发送的。
问候,亚当