nginx 不会在文档根目录的子目录中提供 error_page

nginx 不会在文档根目录的子目录中提供 error_page

以下是我的 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),浏览器可能会显示自己的错误页面并忽略您的内容,即使它是由服务器发送的。

问候,亚当

相关内容