error_page 似乎无法与 nginx 上游指令配合使用

error_page 似乎无法与 nginx 上游指令配合使用

我正在尝试使用 nginx 对几个下游应用服务器进行负载平衡,并在所有下游服务器都处于离线或无响应状态时显示“fail whale”样式的页面。不幸的是,nginx 文档说您不能将该指令与块中的指令backup结合使用,所以我一直在尝试想出一个替代方案。ip_hashupstream

目前,我的配置中的相关块是:

upstream appservers {
    ip_hash;
    server srv1:8080;
    server srv2:8080;
}

server {
    listen       80;

    location / {
        proxy_pass http://appservers;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 5s;
        error_page   502 503 504  http://failwhale.myapp.com;
    }
}

问题是,如果我关闭两个应用服务器,当 nginx 返回 502(坏网关)错误时,它似乎只是使用默认的 502 错误页面(纯白色页面),而不是重定向到http://failwhale.myapp.com(它也由 nginx 提供服务并且肯定已经启动)。

有人知道我做错了什么吗?或者这是否应该像我希望的那样工作?如果没有,还能做什么?

答案1

搞清楚了。你需要proxy_next_upstreamdecl 来捕获这些错误,如下所示:

location / {
    proxy_pass http://appservers;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 5s;
    proxy_next_upstream error timeout http_502 http_503 http_504;
    error_page   502 503 504  http://failwhale.myapp.com;
}

相关内容