我在3个不同的主机上运行nginx作为反向代理。 DNS将production.example.comparsing为所有3个主机的IP地址。 因此,如果一个主机不可用,我有一些负载平衡和回退。
每个主机都运行多个docker集装箱。 其中一些在所有三个主机上运行,一些仅在两个或甚至仅一个主机上运行。
利用nginx的proxy_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; }