我正在尝试使用 nginx 对几个下游应用服务器进行负载平衡,并在所有下游服务器都处于离线或无响应状态时显示“fail whale”样式的页面。不幸的是,nginx 文档说您不能将该指令与块中的指令backup
结合使用,所以我一直在尝试想出一个替代方案。ip_hash
upstream
目前,我的配置中的相关块是:
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_upstream
decl 来捕获这些错误,如下所示:
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;
}