ユーザーまたはクライアントデバイスあたりの帯域幅消費を制限する方法

最終公開日 : Sep 25, 2026
Web サイト、アプリケーション、またはファイルホスティングサービスには、すべてのユーザーにサービスを提供するために利用可能な有限なネットワークリソースとサーバーリソースがあります。最も重要なリソースの 1 つは帯域幅です。ユーザベースのサブセットだけが帯域幅を大幅に消費すると、ネットワークの輻輳が発生し、他のユーザに対するリソースのアベイラビリティが低下する可能性があります。ネットワークの輻輳を防ぐために、要求に至るまでの一定の期間にわたって事前設定された帯域幅値を超えた場合、HTML ページを使用してクライアント要求に応答するなど、一時的なサービス拒否技術を使用して、クライアントの帯域幅消費を制限する必要があります。
一般に、帯域幅の消費量は、クライアントデバイスごとまたはユーザーごとに調整できます。このユースケースは、1 時間にわたってクライアントあたりの帯域幅消費を 100 MB に制限する方法を示しています。また、このユースケースは、ユーザー名を提供するカスタムヘッダーを使用して、1 時間にわたって 100 MB にユーザーあたりの帯域幅消費を規制する方法を示しています。どちらの場合も、1 時間の移動期間における帯域幅消費の追跡は、ストリーム識別子の interval パラメータを 60 分に設定することで実現されます。また、このユースケースでは、制限を超えたクライアントに送信する HTML ページをインポートする方法も示します。HTML ページをインポートすると、これらのユースケースでのレスポンダーアクションの設定が簡素化されるだけでなく、同じレスポンダーを必要とするレスポンダーアクションの設定も簡素化されます。
コマンドラインインターフェイスを使用して、ユーザーまたはクライアントデバイスあたりの帯域幅消費を制限するには
コマンドラインインターフェイスで次のタスクを実行して、クライアントまたはユーザーの帯域幅消費を制限するためのアクション分析を構成します。各ステップには、サンプルコマンドとその出力が含まれています。
  1. **負荷分散構成を設定します。**負荷分散仮想サーバーmysitevipを構成し、必要なすべてのサービスを構成します。サービスを仮想サーバにバインドします。次の例では、10 個のサービスを作成し、そのサービスを mysitevip にバインドします。
    > add lb vserver mysitevip HTTP 192.0.2.17 80
     Done
    > add service service[1-10] 192.0.2.[240-249] HTTP 80
    service "service1" added
    service "service2" added
    service "service3" added
    .
    .
    .
    service "service10" added
     Done
    > bind lb vserver vserver1 service[1-10]
    service "service1" bound
    service "service2" bound
    service "service3" bound
    .
    .
    .
    service "service10" bound
     Done
  2. **ストリームセレクタを設定します。**次のストリームセレクタのいずれかを設定します。
    • クライアントごとの帯域幅消費を制限するには、クライアント IP アドレスを識別するストリームセレクタを設定します。
      > add stream selector myselector CLIENT.IP.SRC
       Done
    • ユーザー名を提供する要求ヘッダーの値に基づいてユーザーごとの帯域幅消費を制限するには、ヘッダーを識別するストリームセレクタを設定します。次の例では、ヘッダーの名前は UserHeader です。
      > add stream selector myselector HTTP.REQ.HEADER(“UserHeader”)
       Done
  3. **ストリーム識別子を設定します。**ストリームセレクタを使用するストリーム識別子を設定します。間隔パラメータを 60 分に設定します。
    > add stream identifier myidentifier myselector -interval 60 -sampleCount 1 -sort BANDWIDTH
     Done
  4. **レスポンダアクションを設定します。**帯域幅消費制限を超えたユーザーまたはクライアントに送信する HTML ページをインポートし、レスポンダーのアクションの crossed_limits でページを使用します。
    > import responder htmlpage http://.1.1.1/stdpages/wait.html crossed-limits.html
    This operation may take some time, Please wait...

     Done
    > add responder action crossed_limits respondwithhtmlpage crossed-limits.html
     Done
  5. **レスポンダポリシーを設定します。**レスポンダーポリシー myrespol1 を ANALYTICS.STREAM (「myidentifier」) .COLLECT_STATS とアクション NOOP を使用して構成します。次に、クライアントまたはユーザーが 100 MB の制限を超えたかどうかを判断するポリシー myrespol2 を構成します。ポリシー myrespol2 は、レスポンダアクション crossed_limits を使用して設定されます。
    > add responder policy myrespol1 'ANALYTICS.STREAM("myidentifier").COLLECT_STATS' NOOP
     Done
    > add responder policy myrespol2 'ANALYTICS.STREAM("myidentifier").BANDWIDTH.GT(104857600)' crossed_limits
     Done
  6. **レスポンダポリシーをロードバランシング仮想サーバにバインドします。**統計データのみを収集するポリシー myrespol1 は、優先順位が高く、GOTO 式を NEXT にする必要があります。
    > bind lb vserver mysitevip -policyName myrespol1 -priority 1 -gotoPriorityExpression NEXT
     Done
    > bind lb vserver mysitevip -policyName myrespol2 -priority 2 -gotoPriorityExpression END
     Done
  7. **構成をテストします。**複数のクライアントまたはユーザからのテスト HTTP 要求をロードバランシング仮想サーバに送信し、stat stream identifier コマンドを使用して、指定された ID について収集された統計情報を表示することにより、設定をテストします。次の出力は、クライアントの統計を表示します。
    > stat stream identifier myidentifier -sortBy BandW –fullValues
    Stream Session statistics
                              Req           BandW
    192.0.2.30                5000          3761
    192.0.2.31                29            2602
    192.0.2.32                25            51

                              RspTime       Conn
    192.0.2.30                2             0
    192.0.2.31                0             0
    192.0.2.32                0             0
     Done
    >
Related information