【发布时间】:2017-12-04 21:32:02
【问题描述】:
我有一个名为 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 以将 502 评估为失败? 如果不可能,在 X.X.X.1 和 X.X.X.2 上,我必须回应 (503, 504 . ?) 以便我的 LB1 认为服务器已关闭?
---------------------- 编辑 ------------------
感谢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;
}
}
提前致谢。 问候
【问题讨论】:
标签: nginx