2015-10-15 95 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