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