Nginx本地回退错误页面(如果代理目标不可用)


9

我正在通过Nginx服务器将请求转发到本地服务。我现在尝试完成的工作是在服务不可用的情况下回退到本地错误页面。

我当前的配置是

server {
    listen       80;
    server_name  "";

    location / {
        proxy_pass  http://127.0.0.1:9080;
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 1;
        proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
        proxy_intercept_errors on;
    }

    error_page 501 502 503 @maintenance;
    location @maintenance {
            root   /locust/www/fallback/htdocs;
            index  index.html index.htm;
    }
}

代理可以工作,但是一旦我使9080上的服务不可用,就不会显示维护位置的index.html。

关于此配置有什么问题的任何建议?

Answers:


12

实际上,我只需要稍微修改一下您的配置即可:

error_page 501 502 503 /500.html;
location = /500.html {
        root   /locust/www/fallback/htdocs;
}

并显然将index.html您要呈现的名称重命名为500.html


1
使用这种方法,当在proxy_pass上运行的应用程序抛出501、502或503时会发生什么?某些应用程序(例如Django)会处理自己的50x错误,因此它们可以具有自定义错误页面。这里的方法是否会比Nginx 500.html页面将应用程序生成的50x错误页面占优势?
乔J

我尚未对其进行测试,但是我99%确信,这些错误将显示/500.html。这个想法是,当nginx从代理服务器获取501502503时,它将显示/500.html。代理服务器为django。
坚果

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.