4

Apache で粘着性を定義しようとしています。proxy.conf の定義は次のとおりです。

<Proxy balancer://fs1>
    BalancerMember https://localhost:5006/doc route=node1
    BalancerMember https://localhost:5008/doc route=node2
    ProxySet stickysession=JSESSIONID|jsessionid
</Proxy>
ProxyPass /doc balancer://fs1

また:

ProxyPass "/doc " "balancer://fs1" stickysession=JSESSIONID|jsessionid scolonpathdelim=On
<Proxy balancer://fs1>
    BalancerMember https://localhost:5006/doc route=node1
    BalancerMember https://localhost:5008/doc route=node2
</Proxy>

粘着性を実現するために、url クエリ パラメータを使用しようとしています (Cookie をオーバーライドすることはお勧めできないことを理解しているため)。Apacheのドキュメントに書かれているように:

スティッキーを実装する 2 つ目の方法は、URL エンコーディングです。Web サーバーは、要求の URL でクエリ パラメーターを検索します。パラメータの名前は、stickysession を使用して再度指定されます。パラメーターの値は、その値と等しいルートを持つメンバー ワーカーを検索するために使用されます。応答に含まれるすべての URL リンクを抽出して操作することは容易ではないため、通常、各リンクにパラメーターを追加する作業は、コンテンツを生成するバックエンドによって行われます。場合によっては、mod_substitute または mod_sed を使用して、Web サーバー経由でこれを実行できる場合があります。ただし、これはパフォーマンスに悪影響を及ぼす可能性があります。

郵便配達員で次の要求を 10 回送信します。

https://{{myserver}}/doc?jsessionid=node1

node1リクエストが (5 つのリクエスト) と (5 つのリクエスト) に渡されていることに気付きましたnode2。しかし、stickysession を定義して、 を選択node1し、毎回このノードに移動するようにします。

私の目標は、クライアントがリクエストを送信しhttps://{{myserver}}/doc?jsessionid=nodeX、リクエストが渡されることですnodeXCookieを使用せずに..、スティッキーのみを使用するのはURLエンコーディングです)。

たとえば、クライアントはリクエストをhttps://{{myserver}}/doc?jsessionid=node110 回送信します。リクエストは 10 回ごとに によって処理されhttps://localhost:5006ます。

私は何を間違っていますか?

4

1 に答える 1

2

いくつかの検索の後、問題を特定しました。URL リクエスト パラメータ経由でルーティングするには、「.」を含める必要があります。次のように「node1」の前に:

https://{{myserver}}/doc?jsessionid=.node1

このブログ投稿は、私を正しい方向に向けました:

ルートは、英数字のプレフィックス、ドット、数字で名前を付けることが非常に重要です。例: server.1、t.2 など。mod_proxy_balancer コードは、ドットを使用してこのルート名を分割し、2 番目の値をルート番号として使用します。したがって、s.1 は「route=1」を指します http://hkrishnan.in/2013/10/14/debugging-apache-mod_proxy_balancer/

私はこれを自分でテストしましたが、うまくいきます!

于 2015-06-25T16:51:24.573 に答える