Haproxy: Versuchen Sie bei 404 ein anderes Backend

Haproxy: Versuchen Sie bei 404 ein anderes Backend

Ich habe einen Haproxy-Server mit mehreren Backends dahinter. Die Auswahl der Backends erfolgt per Round-Robin-Verfahren. Wenn das ausgewählte Backend eine 404-Fehlermeldung liefert, muss es trotzdem andere Backends ausprobieren.

Wenn von allen erreichbaren Backends 404 zurückgegeben wird, sollte haproxy 404 an den Client zurückgeben.

Ist das möglich?

Antwort1

Nein, das ist (derzeit) nicht möglich.

HAProxy versucht es erneut mit einem anderen Backend-Server, wenn vor dem Senden der Anfrage Fehler aufgetreten sind, z. B. ein Verbindungstimeout. Wenn die Verbindung mit einem Backend-Server hergestellt ist und eine Anfrage gesendet wird, auch wenn es sich nur um ein Byte handelt, versucht HAProxy nicht, einen anderen Backend-Server zu verwenden.

Antwort2

Nein. option redispatchist das Nächstliegende, was HAProxy hat, aber es wird nur dann einen erneuten Versuch mit einem anderen Backend unternehmen, wenn retries> 0 ist und die Verbindung zum Backend fehlschlägt. Der HTTP-Statuscode vom Backend ist dabei egal, es ist nur wichtig, ob das Backend ausgefallen ist (nicht erreichbar, keine Antwort).

Antwort3

Ja, wenn ich das richtig verstanden habe, mit der Option

option httpchk GET /../CheckHealth.html
http-check disable-on-404

Wobei CheckHealth.html ein erreichbares Ressourcenbeispiel sein sollte. Wenn die Ressource nicht gefunden wird und ein 404-Fehler auftritt, wurde der Knoten auf „Aktiv oder Backup SOFT STOPPED für Wartungsarbeiten“ gesetzt und das Roundrobin sendet nie wieder eine Anfrage an diesen Knoten, sondern wechselt nur zu den anderen.

Etwas wie :

 backend backend_servers
 balance            roundrobin
 option httpchk GET /.../CheckHealth.html
 http-check disable-on-404
 server             www01 XX:YY:ZZ:KK:8180 check
 server             www02 XX:YY:ZZ:MM:8180 check
 server         www03 XX:YY:ZZ:FF:8180 check

wird auf www02 fehlschlagen, weil dort kein WAR bereitgestellt ist, und der Rest auf www01, www03, ohne dass dem Client ein Fehler angezeigt wird.

verwandte Informationen