Haproxy: 404 の場合は別のバックエンドを試す

Haproxy: 404 の場合は別のバックエンドを試す

私は、背後に複数のバックエンドを持つ haproxy サーバーを持っています。バックエンドはラウンドロビンで選択されます。いずれにしても、選択したバックエンドから 404 を受け取った場合は、他のバックエンドを試す必要があります。

到達可能なすべてのバックエンドから 404 が返された場合、haproxy はクライアントに 404 を返す必要があります。

それは可能ですか?

答え1

いいえ、今のところは不可能です。

HAProxy は、リクエストが送信される前にエラー (接続タイムアウトなど) が発生した場合、別のバックエンド サーバーを再試行します。1 つのバックエンド サーバーとの接続が確立され、リクエストが 1 バイトでも送信された場合、HAProxy は別のバックエンド サーバーの使用を試行しません。

答え2

No. option redispatchは HAProxy に最も近いものですが、が 0 より大きく、バックエンドへの接続が失敗した場合にのみ、別のバックエンドを再試行しますretries。バックエンドからの HTTP ステータス コードは考慮せず、バックエンドがダウンしているかどうか (アクセスできない、応答がない) のみを考慮

答え3

はい、私が正しく理解していれば、オプションで

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

CheckHealth.html は到達可能なリソース サンプルであるはずですが、リソースが見つからず 404 エラーを受信した場合、ノードは「メンテナンスのためアクティブまたはバックアップのソフト停止」に設定され、ラウンドロビンは他のノードに切り替えてそのノードに再度要求を送信することはありません。

何かのようなもの :

 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

www02 では WAR がデプロイされていないため失敗し、www01、www03 ではバランスが取れており、クライアントには失敗は表示されません。

関連情報