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

这是我的nginxconfiguration的一个片段:

server { error_page 500 /errors/500.html; } 

当我在我的应用程序中导致500人时,Chrome只显示默认的500页(Firefox和Safari显示空白页),而不是我的自定义错误页面。

我知道该文件存在,因为我可以访问http://server/errors/500.html ,我看到了页面。 我也可以将文件移动到文档根目录并将configuration更改为:

 server { error_page 500 /500.html; } 

而nginx正确地为页面提供服务,所以在服务器上似乎没有其他的configuration。

我也试过:

 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; } 

foo.html确实存在于文档根目录下。 它几乎看起来像别的东西是覆盖我的configuration,但是这个块是/etc/nginx/*中引用error_page指令的唯一地方。

有没有其他地方可以设置nginxconfiguration?

尝试添加

 proxy_intercept_errors on; 

要么

 fastcgi_intercept_errors on; 

在服务器块取决于您的configuration。

这种configuration工作正常:

  error_page 500 502 503 504 /500.html; location = /500.html { root /home/static/pages; } 

尝试这个:

服务器{error_page 500 = 200 /errors/500.html; }

这应该发送http状态200,所以浏览器将显示您的页面。 默认状态(500)浏览器可能会显示自己的错误页面,并忽略您的内容,即使它是由服务器发送。

问候,亚当