【问题标题】:Backup nginx server returning 504备份 nginx 服务器返回 504
【发布时间】:2015-10-15 21:00:36
【问题描述】:

我设置了 3 个 nginx 服务器。备份 Web 服务器和主服务器都具有相同的 ../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;
    }
}

但是当我测试备份服务器是否正常工作时,我遇到了一个问题(下面会以图形方式解释),因为它似乎只在主服务器打开时才工作!

1. test.foo.com -> Backup Web Server
2. foo.com       -> Load Balancer
3. www.foo.com   -> Home server

-> 表示指向

什么都没有发生时:

- 1 returns OK
- 2 returns OK
- 3 returns OK

当主服务器关闭时:

- 1 returns 504 **(SHOULD BE OK)**
- 2 returns 504 **(SHOULD BE OK)**
- 3 returns DNS error

当负载均衡器关闭时:

- 1 returns OK
- 2 returns DNS error
- 3 returns OK

当备份 Web 服务器关闭时:

- 1 returns DNS error
- 2 returns 200
- 3 returns 200

【问题讨论】:

    标签: nginx load-balancing


    【解决方案1】:

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

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

    • 同样,您从上游家庭服务器获得504这一事实意味着它没有关闭,因此您的备份服务器永远不会被使用,因为nginx只会使用backup如果主服务器确实不可用

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-16
      • 2020-01-20
      • 2016-11-28
      • 1970-01-01
      • 2021-09-11
      • 2015-07-16
      • 1970-01-01
      • 2011-01-10
      相关资源
      最近更新 更多