有一个非常简单的 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
默认是“错误超时”,但您可以告诉他捕获 502 错误。
在您的配置中这将是:
location / {
proxy_http_version 1.1;
proxy_pass http://api_servers;
proxy_next_upstream error timeout http_502;
}