备份nginx服务器返回504

max*_*sme 6 load-balancing nginx

我有3个nginx服务器设置.备份网络服务器和家用服务器都具有相同../sites-enabled../sites-available目录.第三台服务器充当负载均衡器,使用配置指向备份和主服务器:

upstream myapp1 {
    server 1.1.1.1; #home server
    server 2.2.2.2 backup; #backup server
}

server {
    listen 80;

    location / {
        proxy_pass http://myapp1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我测试备份服务器是否正常工作时,我遇到了一个问题(下面将更详细地解释),因为它只在主服务器开启时才起作用!

1. test.foo.com -> Backup Web Server
2. foo.com       -> Load Balancer
3. www.foo.com   -> Home server
Run Code Online (Sandbox Code Playgroud)

->意味着指向

什么都没有下来:

- 1 returns OK
- 2 returns OK
- 3 returns OK
Run Code Online (Sandbox Code Playgroud)

Home Server关闭时:

- 1 returns 504 **(SHOULD BE OK)**
- 2 returns 504 **(SHOULD BE OK)**
- 3 returns DNS error
Run Code Online (Sandbox Code Playgroud)

Load Balancer关闭时:

- 1 returns OK
- 2 returns DNS error
- 3 returns OK
Run Code Online (Sandbox Code Playgroud)

备份Web服务器关闭时:

- 1 returns DNS error
- 2 returns 200
- 3 returns 200
Run Code Online (Sandbox Code Playgroud)

cns*_*nst 2

您似乎对这里的术语感到困惑:

  • 当负载均衡器关闭时,您会收到或类型的错误;您不会收到 DNS 错误connect(2) Connection refusedOperation timed out

  • 同样,您从上游主服务器获取数据的事实504意味着它没有关闭,因此您的备份服务器永远不会被使用,因为只有在主服务器确实不可用时nginx才会使用backup

您可以通过获取支持该health_check指令的 nginx 付费版本来解决第二个问题。

或者,您可以实现缓存,并用于proxy_cache_use_stale指定应返回缓存版本。error_page另外,也请看一下