是否可以在Nginx中提供自定义“Bad Gateway”错误页面?
与自定义404页面类似。
答案 0 :(得分:43)
必须有三个部分才能显示自定义错误页面而不是通用的“错误网关”错误。
您必须创建一个名为“500.html”的html文件并将其放在根目录中。如果Rails在Nginx后面运行,这意味着将它放在public / 500.html。
您的配置文件中必须有一行指向该500.html页面的至少502个错误,如下所示:
error_page 502 /500.html;
您的配置文件中必须有/500.html的位置块。如果已定义根,则此块可以为空。但是块必须存在。
location /500.html{
}
答案 1 :(得分:32)
它与设置自定义404页面类似。这就是我所拥有的。
#site-wide error pages
error_page 404 /404.html;
error_page 500 502 503 504 /500.html;
答案 2 :(得分:2)
是的,有可能
在您的终端中输入
cd /etc/nginx
sudo nano nginx.conf
并在http下添加这些行
error_page 500 Path_to_your_custom_error_page;
error_page 503 Path_to_your_custom_error_page;
error_page 504 Path_to_your_custom_error_page;
现在输入以下命令重新启动nginx:
sudo service nginx restart
Bingo现在您可以在网关错误
上看到自定义错误消息答案 3 :(得分:0)
使用debian(实际上是9.3伸展)我做了以下步骤:
使用502错误页面
/var/www/html/502.html
修改/etc/nginx/sites-enabled/mywebsite.conf
所以它看起来像这样:
server {
listen 80; listen [::]:80;
server_name www.mywebsite.com;
error_page 502 /502.html;
location /502.html {
root /var/www/html;
}
}
service nginx restart
答案 4 :(得分:0)
这个问题没有说,但是当API在nginx传递代理后面时,遇到这个问题是很常见的,因此在这种情况下你希望响应是JSON而不是HTML。
我最喜欢的方法是使用error_page
指令的重定向功能重定向回同一网站上的错误页面:
error_page 502 503 $scheme://$server_name/500.json;
这是一行,您可以为不同的500.json
重复使用相同的location
,并且不需要神秘的空location
。您将错误消息放在站点根目录的500.json
文件中。我假设你已经有一个location / {...}
指令来提供静态文件。
您当然可以使用相同的方法来提供HTML错误页面。
答案 5 :(得分:0)
尽管@Larsenal的答案在最低配置上在技术上是正确的,但存在一些通用配置会使它不起作用。 @杰克·沙漠(Jack Desert)的答案触及了这一点,但没有提供为什么需要它的完整解释。
假设我们具有此配置(从@Jack简化)。
error_page 502 504 /my-error-page.html;
这是在内部发生502或504错误的情况下,将原始URI重写为/my-error-page.html
。
我认为大多数人会错过的是,然后经历相同的处理链,就好像您直接请求该页面一样。这意味着它要通过所有相同的位置块检查。
由于在nginx上执行反向代理的常见方法是配置location / {
块,因此该位置与/my-error-page.html
匹配,因此 nginx尝试使用代理来提供错误文件< / strong>。由于常见的用例是在后端关闭的情况下提供静态文件,因此从后端提供此错误页面也可能会失败,从而使nginx默认为提供自己的内部错误页面,而我们在第一个尝试中将其替换地方。
因此,@ Jack Desert提出的一种常见解决方案是在location
块之前包含另一个与/my-error-page.html
URL匹配的location /
块。注意,nginx配置中的位置块顺序无效。有一组非常具体的规则,用于根据URL选择位置块的优先级。该位置块需要具有服务该文件所需的任何内容,就像nginx可能服务的任何其他静态文件一样。这意味着某个地方需要一个root
指令,并且将相对于该指令加载/my-error-page.html
({nginx配置的几乎任何级别都可以设置root
)。