Nginx gibt 502 zurück, während das Backend neu gestartet wird. Wie kann ich N-mal mit einer Verzögerung von M Sekunden einen Nginx-Proxy-Wiederholungsversuch durchführen? Gibt es ein Plugin oder etwas anderes?
16
Ich fand heraus, dass Nginx ~ 2 Sekunden brauchte, um Versuche zu erschöpfen, wenn Sie Hunderte von Instanzen desselben Backends angegeben hatten:
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
(.... ähm, nach Bedarf wiederholen!)
Ja, ein schrecklicher Kludge - aber es fügt ein gewisses Maß an Hartnäckigkeit hinzu ...
Schlimmer noch, Sie könnten Folgendes verwenden:
server localhost:8080 max_fails=0;
server localhost:80 backup;
Unter der Annahme, dass Nginx auf Port 80 ausgeführt wird, würde dies versuchen, die Anforderung kontinuierlich um Nginx herum zu schleifen, bis localhost: 8080 antwortet. Dh wiederholen Sie eine unendliche (?) Anzahl von Malen mit einer Verzögerung von null Sekunden.
Ich werde jetzt zu meiner gepolsterten Zelle zurück ...
Wenn Ihre Nginx-Installation Lua-Unterstützung bietet, können Sie den Client für einige Zeit mit der Schlafmethode festhalten. Die Operation ist nicht blockierend und sperrt den Arbeiter nicht. Beachten Sie, dass der Benutzer nicht unbegrenzt gehalten werden kann, da es schließlich zu einigen anderen Netzwerk-bezogenen Socket- / Firewall-Timeouts kommen kann.
Dann müssen Sie in Ihrer Upstream-Liste den obigen Server als Backup hinzufügen, um einen Client zu halten.
Und dies sollte in Ihrer Proxy-Standortangabe enthalten sein:
quelle
lua
Modul für Nginx unter Ubuntu 17.04:sudo apt-get install libnginx-mod-http-lua
Das Nächste, was ich weiß, ist dieses Projekt , das ich aber nie benutzt habe. Ich weiß, dass Lack Back-End-Prüfung hat, vielleicht möchten Sie einen Blick darauf werfen.
quelle