带有dynamic回退的Nginx proxy_pass

我在3个不同的主机上运行nginx作为反向代理。 DNS将production.example.comparsing为所有3个主机的IP地址。 因此,如果一个主机不可用,我有一些负载平衡和回退。

每个主机都运行多个docker集装箱。 其中一些在所有三个主机上运行,​​一些仅在两个或甚至仅一个主机上运行。

利用nginxproxy_pass我把所有的请求转发到容器的内部名称(我正在使用Rancher,因此每个容器都可以通过内部DNS通过container_name.stack_name访问)。

时不时地,容器不可用或不响应,因此nginx返回错误502。

有什么办法可以自动回退吗? 不幸的是, nginx忽略内部Docker容器名称的所有其他parsing地址,因此不会将请求转发到其他地址。

你应该使用proxy_next_upstream指令

指定在哪种情况下请求应该传递给下一个服务器

 location / { proxy_pass http://backends; proxy_next_upstream error timeout http_502; }