502 Bad Gateway 错误时的自定义页面

502 Bad Gateway 错误时的自定义页面

我想使用 Nginx 作为一个简单的反向代理,但如果 Nginx 后面的服务器宕机,我只能显示一个空白页。出于某种原因,此配置在出现错误 502 时不会显示空白页,我不知道为什么。

user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    use epoll;
    # multi_accept on;
}

http {

    keepalive_timeout 65;
    proxy_read_timeout 200;

    upstream tornado {
        server 127.0.0.1:8001;
    }

    server {
        listen 80;
        server_name www.something.com;

        location / {
            error_page 502 = @blank;
            proxy_pass http://tornado;
        }

        location @blank {
            index index.html;
            root /web/blank;
        }
    }
}

答案1

我认为在命名位置 (@blank) 中会忽略“root”。无法判断这是设计使然还是错误。

这对我有用(0.7.67):

    location / {
        error_page 502 = /blank.html;
        proxy_pass http://tornado;
    }

    location = /blank.html {
        root /foo/bar;
    }

答案2

我在虚拟主机配置文件的指令内添加了以下配置server。只有将其放在此处,它才会起作用。如果将其放在 nginx.conf 中,Nginx 会报错,并且不会重新加载。您可以通过命令自由地测试和验证它nginx -t

server {
    // ........

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html/;
    }

    // ........
}

/usr/share/nginx/html/50x.html然后,您应该在 500/502/503/504 http 响应状态后显示的位置添加一个文件。

echo "If you see me, then you got a 50x response status" | sudo tee /usr/share/nginx/html/50x.html

已针对 nginx/1.14.2 进行测试

答案3

为整个服务器指定“error_page”,而不是为“location /”指定“error_page”

相关内容