使用Nginx自定义错误网关页面

时间:2011-10-17 15:48:40

标签: nginx

是否可以在Nginx中提供自定义“Bad Gateway”错误页面?

与自定义404页面类似。

6 个答案:

答案 0 :(得分:43)

必须有三个部分才能显示自定义错误页面而不是通用的“错误网关”错误。

  1. 您必须创建一个名为“500.html”的html文件并将其放在根目录中。如果Rails在Nginx后面运行,这意味着将它放在public / 500.html。

  2. 您的配置文件中必须有一行指向该500.html页面的至少502个错误,如下所示:

    error_page 502 /500.html;
    
  3. 您的配置文件中必须有/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
  • 重新启动nginx

答案 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)。