Citrix ADC

ユースケース:セッション数の制限

このユースケースでは、アクティブなバックエンドセッションの数を制限する必要があります。デプロイメントでは、各セッションログインが URL にログインし、各セッションログアウトが URL にログアウトします。ログインに成功すると、バックエンドは一意の10文字の値を持つセッションIDクッキーを設定します。

このユースケースを実現するには、次の操作を実行します。

  1. 各アクティブなセッションを格納できるマップ変数を作成します。マップのキーはセッションIDです。変数の有効期限は 600 秒 (10 分) に設定されます。</span>

    > add ns variable session_map -type map(text(10),ulong,100) -expires 600
    
  2. マップ変数に次の代入を作成します。</span>

    • sessionid のエントリを作成し、その値を 1 に設定します (この値は実際に使用されません)。</span>

       > add ns assignment add_session -variable '$session_map[http.req.cookie.value("sessionid")]' -set 1
      
    • セッション ID のエントリの割り当てを解除します。これにより、session_map の値カウントが暗黙的にデクリメントされます。</span>

       > add ns assignment delete_session -variable '$session_map[http.req.cookie.value("sessionid")]' -clear
      
  3. 次の応答者ポリシーを作成します。</span>

    • HTTP 要求にそのセッション ID のマップエントリが存在するかどうかを確認する。add_session 割り当ては、マップエントリが存在しない場合に実行されます。</span>

       > add responder policy add_session_pol 'http.req.url.contains("twbkwbis.P_SabanciLogin") || $session_map.valueExists(http.req.cookie.value("netsuis"))' add_session
      

      注: add_session_pol ポリシーの valueExists () 関数は、セッションのマップエントリへの参照としてカウントされるため、各リクエストはセッションの有効期限タイムアウトをリセットします。10 分経過してもセッションに対する要求が受信されない場合、セッションのエントリは割り当て解除されます。

    • セッションがいつログアウトされたかを確認する。delete_session 割り当てが実行されます。</span>

       add responder policy delete_session_pol "http.req.url.contains("Logout")" delete_session
      
    • ログイン要求があるかどうか、およびアクティブなセッション数が 100 を超えているかどうかを確認する。これらの条件が満たされた場合、セッション数を制限するために、ユーザーはサーバーがビジー状態であることを示すページにリダイレクトされます。</span>

       add responder action redirect_too_busy redirect "/too_busy.html"
       add responder policy check_login_pol "http.req.url.contains("twbkwbis.P_SabanciLogin") && $session_map.valueCount > 100" redirect_too_busy
      
  4. レスポンダーポリシーをグローバルにバインドします。</span>

    bind responder global add_session_pol 30 next
    bind responder global delete_session_pol 10
    bind responder global check_login_pol 20
    

ユースケース:セッション数の制限