nginx 作为反向代理 - 如果 502 则禁用上游节点

nginx 作为反向代理 - 如果 502 则禁用上游节点

有一个非常简单的 LB,比如 LB1

upstream api_servers {
    least_conn;
        server 10.0.0.193;
        server 10.0.0.11;
    }
server {
    location / {
        proxy_http_version 1.1;
        proxy_pass http://api_servers;
    }
}

每个上游服务器也是本地运行的 nginx LB,并在 9000 端口上反向代理进程。问题是,当端口 9000 上的任何进程发生故障时,如果请求到达进程发生故障的其中一台机器,LB1 就会返回 502。

LB1:nginx:80 -> 10.0.0.193:nginx:80 -> localhost:9000

我如何告诉 nginx LB1 不要向以 502 响应的节点发送请求?

答案1

如果能知道正式的答案就好了,如果 502 出现故障,如何让 nginx 忽略上游服务器,但在这种特殊情况下,让 LB1 联系 9000 上的服务器并删除中间 nginx 会更容易,这是出于历史原因。

答案2

使用ngx_http_proxy_module

默认是“错误超时”,但您可以告诉他捕获 502 错误。

在您的配置中这将是:

location / {
    proxy_http_version 1.1;
    proxy_pass http://api_servers;
    proxy_next_upstream error timeout http_502;
}

相关内容