2015-10-15 100 views
6

我有3个nginx服务器设置。备份Web服务器和主服务器都有相同的目录../sites-enabled../sites-available。而第三个服务器充当指向备份,并与配置的家用服务器都负载均衡:备份nginx服务器返回504

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 

回答

1

你似乎对这里的术语被混淆:

  • 当负载平衡器下来,你会越来越connect(2)Connection refusedOperation timed out风格错误;你会不会越来越DNS错误

  • 同样,你是从你的上游家庭服务器获取504的事实,意味着它不下来,因此永远不会被使用备份服务器,因为nginx只会用backup如果主服务器确实是不可

你可以通过获取nginx的付费版本,其中有对health_check指令的支持可能解决第二个问题。

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