2

クライアントのリクエストを 1 つのサーバーに転送するために、Haproxy を Layer7 http プロキシとして使用します。1 つの長い接続として、すべての要求をサーバーに転送する前に、いくつかの URL 文字列を別の文字列に置き換える必要があります。例えば:reqirep ^([^\ ])\ /test/(.) \1\ /serverfault/\2

追跡したところ、HAProxy は各接続の最初のリクエストのみを処理することがわかりました。つまり、Haproxy は最初の POST /test/why を POST /stackoverflow/why に置き換えるだけです。2 番目、3 番目は... しません....

Haproxy マニュアルには次のように書かれています。次のリクエストは長い接続の前のリクエストと関係があるため、文字列を置き換えて接続を維持し、クライアントが必要なときに接続を閉じられるようにしたいと考えています。「option httpclose」または「option http-server-close」を試しましたが、うまくいきません。Haproxy は、1 つの長い接続で要求を reqirep に置き換えることをサポートしていませんか? それを達成するためのオプションまたは方法はありますか。

4

1 に答える 1

0

Haproxy はまだキープアライブを完全にはサポートしていません。1.5 が「安定」した時点で完全に実装される予定です。そうは言っても、私は非常に大規模な実稼働環境で 1.5 ブランチをほぼ 1 年間問題なく使用してきました。

バックエンドサーバーに対してhaproxyサーバーを閉じるだけのhttp-server-closeを使用することをお勧めします(つまり、クライアントがキープアライブをhaproxyに使用できるようになります)。これにより、haproxy が 2 番目、3 番目などのリクエストを変更しないという問題が修正されます。同じクライアントが常に同じバックエンドに行くようにしたいようです。この場合は、スティック テーブルまたは Cookie アフィニティの使用を検討できます。https://code.google.com/p/haproxy-docs/wiki/cookie

バックエンドまでずっとキープアライブが本当に必要な場合は、別の製品を使用することを検討する必要があるかもしれませんが、あなたの説明から、永続性を使用して逃げることができると思います.

于 2013-08-19T15:06:49.627 に答える