我在 3 个不同的主机上运行nginx
反向代理。DNS 将 production.example.com 解析为所有 3 个主机的 IP 地址。因此,如果一个主机不可用,我会进行某种负载平衡和回退。
每台主机都运行着多个docker容器,有的在三台主机上运行,有的只在两台甚至一台主机上运行。
利用nginx
我proxy_pass
将所有请求转发到容器的内部名称(我正在使用 Rancher,因此每个容器都可以通过内部 DNS 通过 container_name.stack_name 访问)。
有时,容器不可用或没有响应,因此nginx
返回错误 502。
有什么方法可以自动回退吗?不幸的是,它nginx
会忽略内部 Docker 容器名称的所有其他已解析地址,因此不会将请求转发到其他地址。
答案1
你应该使用proxy_next_upstream指示
指定在什么情况下应将请求传递到下一个服务器
location / {
proxy_pass http://backends;
proxy_next_upstream error timeout http_502;
}