我有一个名为LB1的负载均衡器,它在* .domain.com上收到请求时在我的2 ip之间取得平衡。我已经放了一个max_fails和一个fail_timeout,以便在一个人关闭时将流量重定向到另一个:
upstream upstreamdomain {
least_conn;
server X.X.X.1 max_fails=1 fail_timeout=10s;
server X.X.X.2 max_fails=1 fail_timeout=10s;
}
server {
listen 80;
server_name ~^(?<subdomain>.+)\.domain.com;
location / {
proxy_set_header Host $subdomain.domain.com;
proxy_pass http://upstreamdomain;
}
}
在每个X.X.X.1和X.X.X.2上,我的应用程序在Y进程上运行,我也管理nginx进程之间的负载均衡
upstream defaultupstream {
least_conn;
server 127.0.0.1:9000 max_fails=1 fail_timeout=10s;
server 127.0.0.1:9001 max_fails=1 fail_timeout=10s;
server 127.0.0.1:9002 max_fails=1 fail_timeout=10s;
}
server {
listen 80;
server_name ~^(?<subdomain>.+)\.domain.com;
location / {
proxy_set_header Host $subdomain.domain.com;
proxy_pass http://defaultupstream;
}
}
当服务器崩溃时,我希望LB1重定向交通另一方,而运行正常。
当进程在X.X.X.1或X.X.X.2上崩溃时,我希望nginx重定向到其他进程的流量,而运行正常。
问题是,当X.X.X.1或X.X.X.2上的所有进程崩溃时,X.X.X.1或X.X.X.2上的nginx返回502服务器不可用
似乎502响应没有增加LB1上的max_fails,LB1仍在考虑没有工作进程的服务器是活着的。
如何在LB1上配置nginx以使eval 502失败? 如果不可能的话,在X.X.X.1和X.X.X.2上,为了让我的LB1认为服务器已关闭,我必须回复(503,504。?)?
----------------------编辑------------------
感谢 oklas ,通过在LB1配置中添加以下行来修复,以强制nginx在出错时更改上游,超时或http 502,503和504:
proxy_next_upstream error timeout http_502 http_503 http_504;
LB1 conf现在是:
upstream upstreamdomain {
least_conn;
server X.X.X.1 max_fails=1 fail_timeout=10s;
server X.X.X.2 max_fails=1 fail_timeout=10s;
}
server {
listen 80;
server_name ~^(?<subdomain>.+)\.domain.com;
location / {
proxy_set_header Host $subdomain.domain.com;
proxy_pass http://upstreamdomain;
proxy_next_upstream error timeout http_502 http_503 http_504;
}
}
提前致谢。 此致
答案 0 :(得分:1)
指定声明条件以切换到前端服务器中的另一台服务器的指令:
proxy_next_upstream http_502;
还要考虑相关的事情:
error_page 404 =200 /.nop.html;
if (condition) {
return 444;
}
其中444
是nginx,特殊错误代码表示close current connection