2015-10-15 4 views
6

Ich habe 3 Nginx-Server-Setup. Der Backup-Webserver und der Home-Server haben beide identische Verzeichnisse ../sites-enabled und ../sites-available. Und der dritte Server fungiert als Load Balancer, die Punkte sowohl für die Sicherung und dem Home-Server mit der config:Backup-Nginx-Server mit 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; 
    } 
} 

Aber ich habe ein Problem (die grafisch weiter unten erläutert wird), wenn ich mich entschieden, um zu sehen ob der Backup-Server funktioniert, da er anscheinend nur funktioniert, wenn der Home Server eingeschaltet ist!

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

-> bedeutet Punkte

Wenn nichts nach unten ist:

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

Wenn Home Server ist unten:

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

Wenn Load Balancer nach unten ist:

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

Wenn Backup Web Server unten ist:

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

Antwort

1

Sie scheinen auf die Terminologie hier zu verwechseln:

  • wenn Load Balancer nach unten ist, dann würden Sie bekommen connect(2)Connection refused oder Operation timed out -Style-Fehler; Sie würden DNS-Fehler nicht

  • ebenfalls bekommen, die Tatsache, dass Sie 504 von Ihren Upstream-Home-Server sind immer, bedeutet, dass es nicht nach unten, so dass Ihr Backup-Server wird nie verwendet, weil nginx nur backup verwenden würde, wenn der primäre Server ist wirklich nicht verfügbar

Sie möglicherweise, indem sie die kostenpflichtige Version von nginx das zweite Problem beheben könnte, die Unterstützung für die health_check Richtlinie hat.

Alternativ können Sie Caching implementieren und proxy_cache_use_stale verwenden, um anzugeben, dass stattdessen eine zwischengespeicherte Version zurückgegeben werden soll. Siehe auch error_page, auch