ADC

如何限制每个用户或客户端设备的带宽消耗

您的网站、应用程序或文件托管服务具有有限的网络和服务器资源,可供其所有用户使用。最重要的资源之一是带宽。只有一部分用户群的大量带宽消耗可能导致网络拥塞和减少其他用户的资源可用性。为了防止网络拥堵,您可能必须使用临时服务拒绝技术来限制客户端的带宽消耗,例如,如果客户端请求在发出请求之前的固定时间段内超过了预配置的带宽值,则使用 HTML 页面响应客户端请求。

通常,您可以调节每个客户端设备或每个用户的带宽消耗。此用例演示如何在一小时的时间段内将每个客户端的带宽消耗限制为 100 MB。用例还演示了如何通过使用提供用户名的自定义标头将每个用户的带宽消耗调节到 100 MB。在这两种情况下,通过将流标识符中的间隔参数设置为 60 分钟来追踪一个小时的移动时间段内的带宽消耗。用例还演示了如何导入 HTML 页面以发送到超过限制的客户端。导入 HTML 页面不仅简化了这些用例中响应程序操作的配置,而且还简化了需要相同响应的所有响应程序操作的配置。

使用命令行界面限制每个用户或客户端设备的带宽消耗

在命令行界面中,执行以下任务来配置操作分析以限制客户端或用户的带宽消耗。每个步骤都包括示例命令及其输出。

  1. 设置您的负载平衡配置。配置负载平衡虚拟服务器 mysitevip,然后配置所需的所有服务。将服务绑定到虚拟服务器。以下示例创建十个服务并将服务绑定到 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
    <!--NeedCopy-->
    
  2. 配置流选择器。配置以下流选择器之一:

    • 要限制每个客户端的带宽消耗,请配置用于标识客户端 IP 地址的流选择器。

       > add stream selector myselector CLIENT.IP.SRC
        Done
       <!--NeedCopy-->
      
    • 要根据提供用户名的请求标头的值限制每个用户的带宽消耗,请配置标识标头的流选择器。在以下示例中,标头的名称是用户头。

       > add stream selector myselector HTTP.REQ.HEADER(“UserHeader”)
        Done
       <!--NeedCopy-->
      
  3. 配置流标识符。配置使用流选择器的流标识符。将间隔参数设置为 60 分钟。

    > add stream identifier myidentifier myselector -interval 60 -sampleCount 1 -sort BANDWIDTH
     Done
    <!--NeedCopy-->
    
  4. 配置响应程序操作。导入要发送给超过带宽消耗限制的用户或客户端的 HTML 页面,然后在响应程序操作 crossed_limit 中使用该页面。

    > 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
    <!--NeedCopy-->
    
  5. 配置响应程序策略。配置响应程序策略 myrespol1 与规则 ANALYTICS.STREAM(“myidentifier”).COLLECT_STATS 和操作 NOOP。然后,配置策略 myrespol2 以确定客户端或用户是否已超过 100 MB 限制。策略 myrespol2 配置了响应程序操作交叉限制。

    > add responder policy myrespol1 'ANALYTICS.STREAM("myidentifier").COLLECT_STATS' NOOP
     Done
    > add responder policy myrespol2 'ANALYTICS.STREAM("myidentifier").BANDWIDTH.GT(104857600)' crossed_limits
     Done
    <!--NeedCopy-->
    
  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
    <!--NeedCopy-->
    
  7. 测试配置。通过将来自多个客户端或用户的测试 HTTP 请求发送到负载平衡虚拟服务器,并使用 stat 流标识符命令查看为指定标识符收集的统计信息来测试配置。以下输出显示客户端的统计信息。

    > 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
    >
    <!--NeedCopy-->
    
如何限制每个用户或客户端设备的带宽消耗