使い方としては普通ですが実用性の高いiRuleを紹介します。
一部のお客様ではよく使われているようですが、意外とこのような動作をどうやって実現するかが実はあまり知られていないようです。
また使ったことのない方は、是非使ってみてください。

目的:
クッキー、あるいはURIに含まれるJavaのJSessionIDパーシステンスを元にユーザセッションを適切なサーバに割り振る

機能解説:
このiRuleはクッキーに含まれているJSessionIDを取り出し、パーシステンス情報にしたがってサーバへ振り分けます。
クッキーに含まれていない場合はURIで探します。
パーシステンスを行うために、このiRuleはそのままVirtual Serverに関連つけるものではなく、Universal Persistence Profileに設定し、そのプロファイルをVirtual Serverに設定する、という形で利用します。

また、サーバのレスポンスが到達したとき、クッキーに含まれたJSessionIDに対してのパーシステンスレコードを生成します。
JSessionIDをクッキーでなく、URIに入れるアプリケーションの場合、JSessionIDが2回目のリクエストのURIで生成するため、1回目のリクエストを処理したサーバへ振り分けるために異なるパーシステンス方法を一旦利用する必要があります。
このような場合、Virtual Serverにsource_addrのパーシステンスをFallback Persistenceプロファイルとして設定する必要があります。

設定概要:
*iRuleをBIG-IPにて入力
*Universalのパーシステンスプロファイルを作成し、このiRuleを関連つける
*Virtual Serverを作成し、上記UniversalパーシステンスプロファイルをDefault Persistence Profileとして設定
*JSessionIDをURIに含むアプリケーションの場合、Fallback Persistence Profileをsource_addrに設定

【iRule定義】



rule WeblogicJSessionPersist {
when HTTP_REQUEST {
if { [HTTP::cookie exists "JSessionID"] } {
persist uie [HTTP::cookie "JSessionID"]
} else {
set jsess [findstr [HTTP::uri] "JSessionID" 11 ";"]
if { $jsess != "" } {
persist uie $jsess
}
}
}
when HTTP_RESPONSE {
if { [HTTP::cookie exists "JSessionID"] } {
persist add uie [HTTP::cookie "JSessionID"]
}
}
}
※F5ネットワークスジャパンでは、サンプルコードについて検証を実施していますが、お客様の使用環境における動作を保証するものではありません。実際の使用にあたっては、必ず事前にテストを実施することを推奨します。