セッションアフィニティ
When you enable session affinity, your load balancer directs all requests from a particular end user to a specific endpoint. This continuity preserves information about the user session — such as items in their shopping cart — that might otherwise be lost if requests were spread out among multiple servers.
Session affinity can also help reduce network requests, leading to savings for customers with usage-based billing.
セッションアフィニティは、ロードバランサーが使用すべきセッションアフィニティのタイプを指定します。指定がない場合は "none" または ""(デフォルト)となります。
プロキシされたロードバランサーへの最初のリクエスト時に、リクエストが転送されるエンドポイントの情報をエンコードしたクッキーが生成されます。同じクライアントから同じロードバランサーへのその後のリクエストは、クッキーがエンコードしたエンドポイントに送信され、クッキーの有効期限が切れるまで、またはエンドポイントが正常である限り続きます。クッキーが期限切れまたはエンドポイントが不健康な場合、新しいエンドポイントが計算されて使用されます。
Session affinity automatically directs requests from the same client to the same endpoint:
- When a client makes its first request, Cloudflare sets a
__cflbcookie on the client (to track the associated endpoint). - Subsequent requests by the same client are forwarded to that endpoint for the duration of the cookie and as long as the endpoint remains healthy.
- If the cookie expires or the endpoint becomes unhealthy, Cloudflare sets a new cookie tracking the new failover endpoint.
flowchart LR
accTitle: Session affinity process
accDescr: Session affinity directs requests from the same client to the same server.
A[Client] --Request--> B{<code>__cflb</code> cookie set?}
B -->|Yes| C[Route to previous endpoint]
C --> O2
B ---->|No| E[Follow normal routing]
E --> O2
E --Set <code>__cflb</code> cookie--> A
subgraph P1 [Pool 1]
O1[Endpoint 1]
O2[Endpoint 2]
end
All cookie-based sessions default to 23 hours unless you set a custom session Time to live (TTL).
The session cookie is secure when Always Use HTTPS is enabled. Additionally, HttpOnly is always enabled for the cookie to prevent cross-site scripting attacks.
これは cookie と似た動作をしますが、最初のエンドポイント選択は安定しており、クライアントのIPアドレスに基づいています。
プロキシされたロードバランサーへの最初のリクエスト時に、構成されたHTTPヘッダーに基づいてセッションキーが生成されます。セッションキーは、ロードバランサーのセッション状態中にリクエストが転送されるエンドポイントを保存するために使用されるリクエストヘッダーをエンコードします。同じヘッダーを持つロードバランサーへのその後のリクエストは、セッションの期間中およびエンドポイントが正常である限り、同じエンドポイントに送信されます。セッションがセッションアフィニティTTL秒の間アイドル状態であるか、エンドポイントが不健康な場合、新しいエンドポイントが計算されて使用されます。
デフォルトでは、HTTPヘッダーによるセッションアフィニティのために構成したHTTPヘッダーのうち少なくとも1つが、ロードバランサーに送信されるリクエストに存在する必要があります。クライアントがリクエストのHTTPヘッダーを追加または削除し、すでにセッションを確立している場合、次のリクエストで見つかった新しいHTTPヘッダーに基づいて新しいセッションが作成されます。これらのヘッダーが構成に指定されている限りです。
すべての構成されたHTTPヘッダーがリクエストに存在することを要求したい場合は、Cloudflare APIを介して session_affinity_attributes.require_all_headers を true に設定するか、Cloudflareダッシュボードでロードバランサーを編集する際に Require all headers を enabled に切り替えてください。
ロードバランサーを作成または編集する際に、ホスト名のステップでセッションアフィニティを有効にします。
セッションアフィニティを有効にすると、次のオプションのいずれかを選択します:
- Cloudflareクッキーのみ: 関連するエンドポイントを追跡するために
__cflbクッキーを設定します。 - CloudflareクッキーとクライアントIPフォールバック:
__cflbクッキーを設定しますが、セッションアフィニティクッキーが提供されていない場合はクライアントIPアドレスも使用します。 - HTTPヘッダーによる。
セッションアフィニティはロードバランサーのプロパティであり、次のエンドポイントで設定できます:
session_affinity、session_affinity_ttl、および session_affinity_attributes パラメータを使用して、セッションアフィニティの動作をカスタマイズします。
HTTPヘッダーによるセッションアフィニティを有効にするには、session_affinity の値を header に設定し、HTTPヘッダー名を session_affinity_attributes.headers に追加します。
APIコマンドの詳細については、APIでロードバランサーを作成するを参照してください。
エンドポイントドレインを使用して、アクティブな顧客に影響を与えることなく、エンドポイントからすべてのトラフィックを排出または削除します。エンドポイントドレインの詳細については、計画的メンテナンスの実施を参照してください。
ゼロダウンタイムフェイルオーバーは、一時的なネットワークの問題が発生した際にプール内のエンドポイントにトラフィックを自動的に送信します。これにより、アクティブなヘルスモニターの間に問題が発生した際に、ユーザーに表示されるエラーを減らすことができます。
次の3つのオプションのいずれかを有効にできます:
- なし: フェイルオーバーは発生せず、ユーザーにエラーが表示される可能性があります。
- 一時的: 元のピン留めされたエンドポイントが利用可能になるまで、他のエンドポイントにトラフィックが送信されます。
- スティッキー: セッションアフィニティクッキーが更新され、その後のリクエストは必要に応じて新しいエンドポイントに送信されます。