
# 配置API的流量控制2.0
流量控制2.0策略可以限制单位时间内API的被调用次数，支持参数流控、基础流控和基于基础流控的特殊流控。
- 基础流控 可以对API、用户、凭据、源IP进行多维度流控，与已有的[配置API的流量控制](https://support.huaweicloud.com/usermanual-apig/apig_03_0025.html)功能一致但不兼容。
  
- 参数流控 支持根据Header、Path、Method、Query以及系统变量中的参数值进行自定义流控。
  
- 基于基础流控的特殊流控 对某个凭据或租户进行特定的流控。
  
![](https://support.huaweicloud.com/usermanual-apig/public_sys-resources/note_3.0-zh-cn.png)
如果此策略在当前实例中不支持，可[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)升级实例到最新版本。
#### 约束与限制
- 同一个环境中，一个API只能被一个流量控制2.0策略绑定，但一个流量控制2.0策略可以绑定多个API。
- 如果一个API绑定流量控制策略后，继续绑定流量控制2.0策略，流量控制策略会失效。
- 参数流控的参数最多可定义20个，规则最多可定义100个。规则数量越多对性能的影响越大，建议规则数量在30个以内。所有规则都会进行独立匹配，只要匹配成功就会执行。
- 策略内容最大长度65535。
- 策略参数会明文展示，为防止信息泄露，请谨慎配置。
- 策略和API本身相互独立，只有为API绑定策略后，策略才对API生效。为API绑定策略时需指定发布环境，策略只对指定环境上的API生效。
- API的下线操作不影响策略的绑定关系，再次发布后仍然会带有下线前绑定的策略。
- 如果策略与API有绑定关系，则策略无法执行删除操作。
- NLB实例下，本策略暂不支持设置IPv6类型的源IP。
 
#### 创建流量控制2.0策略
1. 进入[API网关控制台](https://console.huaweicloud.com/apig2/#/overview)页面。
2. 根据实际业务在左侧导航栏上方选择实例。

3. 在左侧导航栏选择"API管理 \> API策略"。
4. 在"策略管理"页面，单击"创建策略"。
5. 在"选择策略类型"弹窗中，选择"插件策略 \> 流量控制2.0"。
6. 在"创建策略"弹窗中，根据下表参数说明，配置策略信息。 
   表1流量控制2.0参数说明 
   | 参数      | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   |:---|:---|
   | 策略名称    | 填写策略的名称，根据业务规划自定义。建议您按照一定的命名规则填写策略名称，方便您快速识别和查找。 支持中文、英文、数字、下划线，且只能以英文或中文开头，长度为3\~255个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 策略类型    | 固定为"流量控制2.0"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 描述      | 填写策略的描述信息。长度为1\~255个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 策略内容    | 策略的配置内容，支持表单配置和脚本配置两种方式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 流控类型    | 推荐使用高性能流控。 - 高精度流控：高并发场景下实例内部会有一定的性能损耗，适用于并发量较小的场景。  - 高性能流控：高并发场景下实例内部性能损耗较小，单位时间内会偶现较小的误差值，适用于并发量较大的场景。  - 单机流控：实例的每个节点各自进行流控，高并发场景下实例内部性能损耗最小，单位时间内会存在一定的误差值，适用于并发量更大的场景。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 策略生效范围  | - 单个API生效 对单个API进行流量统计和控制。   - API共享生效 对绑定了该策略的所有API进行总流量统计和控制。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | 时长      | 流量限制的时长，单位可选秒、分钟、小时、天。 - 与"API流量限制"配合使用，表示单位时间内的单个API请求次数上限。  - 与"用户流量限制"配合使用，表示单位时间内的单个用户请求次数上限。  - 与"凭据流量限制"配合使用，表示单位时间内的单个凭据请求次数上限。  - 与"源IP流量限制"配合使用，表示单位时间内的单个IP地址请求次数上限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | API流量限制 | 单个API被调用次数上限。 与"时长"配合使用，表示单位时间内的单个API请求次数上限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 用户流量限制  | 单个用户调用API次数上限，如果API认证方式为IAM认证，用户流量根据项目ID来限制；如果API认证方式为APP认证，用户流量根据账号ID来限制**。**账号ID和项目ID请参考下文"特殊租户"配置说明。 - 不超过"API流量限制"。  - 与"时长"配合使用，表示单位时间内的单个用户请求次数上限。  - 如果主账号下有多个子用户访问API，按主账号累计的调用次数进行限制。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 凭据流量限制  | 单个凭据调用API次数上限，仅适用于API的安全认证方式为APP认证时。 - 不超过"API流量限制"。  - 与"时长"配合使用，表示单位时间内的单个凭据请求次数上限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | 源IP流量限制 | 单个IP地址调用API次数上限。您可以选择配置实例的"real_ip_from_xff"参数使用X-Forwarded-For头中的IP作为流控的判断依据。 - 不超过"API流量限制"。  - 与"时长"配合使用，表示单位时间内的单个IP地址请求次数上限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 参数流控配置  | 参数流控配置开关。开启后，以参数维度进行流控限制。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 定义参数    | 定义用于规则匹配的参数。 - 参数位置：用于规则匹配的参数位置。 - path：API请求的URI，系统默认配置。  - method：API请求方法，系统默认配置。  - header：请求头的key值。**建议不要设置敏感信息，以防泄露。**  - query：QueryString的key值。  - system：系统参数。    - 参数：用于判断与规则匹配中的参数值是否匹配。最多可定义20个参数。支持英文、数字、中划线、下划线、点，且只能以英文开头，长度为1\~32个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 定义规则    | 定义流控生效的规则。 单击"添加规则"，可添加多个规则。规则名称支持中文、英文、数字、中划线、下划线、点、斜杠、中英文格式下的小括号和冒号、中文格式下的顿号，且只能以英文、中文和数字开头，长度为3\~255个字符。 - 生效维度 - 参数限流：对含有流控参数的请求进行流控。支持对流控参数的每一个取值进行单独流控，或者对多个流控参数的每一个组合取值进行单独流控。流控参数也可以结合条件规则进行流控。  - 规则限流：对匹配条件规则的请求进行流控。    - 流控参数 使用"参数限流"生效维度时需要配置。参数为用户已定义的参数，最多支持选择5个参数。如果同一参数对应多个值，默认取第一个值。如果勾选"包含空值"，表示当流控参数的组合值为空且满足条件规则时，依然会进行参数流控。   - 条件规则 单击![](https://support.huaweicloud.com/usermanual-apig/zh-cn_image_0000002076520562.png)，可添加多个条件表达式，选择"定义参数"中的参数名和判断条件，以及输入参数值。 - =为等于  - !=为不等于  - pattern为正则表达式  - enum为枚举值，多个参数值之间用英文逗号分隔    - API流量限制 API调用次数的最大值。   - 时长 定义规则的流量控制时长，如果此处不配置时长，规则的流量控制时长以"策略基本信息"的时长为准。    例如，在"定义参数"中添加参数"Host"，参数位置选择"header"；在"定义规则"中添加一条规则，生效维度选择"规则限流"，匹配条件设置成"Host = www.abc.com"，API流量限制为10，时长为60s。表示在60s内，对于请求头域中Host参数等于"www.abc.com"的API，且API调用次数达到10，参数流控生效。 |
   | 特殊流控配置  | 特殊流控配置开关。开启后，"基础流控"的用户流量限制/凭据流量限制与"特殊流控"的特殊租户/特殊凭据共同作用时，以特殊流控值为准。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 特殊租户    | 租户ID为账号ID或项目ID。 - 绑定APP认证的API时，租户ID为[项目ID](https://support.huaweicloud.com/api-apig/apig-api-180713009.html)。  - 绑定华为IAM认证的API时，租户ID为账号ID，不支持细分到IAM用户维度，获取账号ID操作请参考[获取账号名和账号ID](https://support.huaweicloud.com/api-apig/apig-api-180713005.html)章节。   阈值为单位时间内，此租户访问API的最大值，不超过"基础流控"的API流量限制值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 特殊凭据    | 选择已有凭据，阈值为单位时间内，此凭据访问API的最大值，不超过"基础流控"的API流量限制值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
      
   
   
7. 单击"确定"。 
   - 在策略列表中显示已创建的策略，表示策略创建成功。
   
   - 如果您需要复制已创建的策略，请在已创建策略的"操作"列中单击"克隆"配置参数即可。**克隆策略的名称不能与已创建的策略名称重复。**
   
   
   
   
8. 策略创建后，您还需要[为策略绑定API]，才能使策略对API生效。
   
   **策略的绑定、解绑、更新会实时生效，不需要重新发布API。**
   
   
 
#### 脚本配置示例
```
{
    "scope": "basic",
    "default_interval": 60,
    "default_time_unit": "second",
    "api_limit": 100,
    "app_limit": 50,
    "user_limit": 50,
    "ip_limit": 20,
    "algorithm": "counter",
    "specials": [
        {
            "type": "app",
            "policies": [
                {
                    "key": "e9230d70c749408eb3d1e838850cdd23",
                    "limit": 10
                }
            ]
        },
        {
            "type": "user",
            "policies": [
                {
                    "key": "878f1b87f71c40a7a15db0998f358bb9",
                    "limit": 10
                }
            ]
        }
    ],
    "parameters": [
        {
            "type": "path",
            "name": "reqPath",
            "value": "reqPath"
        },
        {
            "type": "method",
            "name": "method",
            "value": "method"
        },
        {
            "type": "header",
            "name": "test_header",
            "value": "test_header"
        }
    ],
    "rules": [
        {
            "rule_name": "rule-h10s",
            "match_regex": "[\"reqPath\",\"==\",\"/\"]",
            "by_parameters": [
                "test_header"
            ],
            "is_include_empty": false,
            "time_unit": "second",
            "interval": 1,
            "limit": 10
        }
    ]
}
```
 #### 为策略绑定API
1. 单击策略名称，进入策略详情。
2. 在API列表区域选择环境后，单击"绑定API"。
3. 筛选API分组以及发布环境，勾选所需的API。 
   支持通过API名称或标签筛选API，标签为创建API时定义的标签。
   
   
4. 单击"确定"，绑定完成。 
   - 如果单个API不需要绑定此策略，单击API所在行的"解绑"。
   
   - 如果批量API不需要绑定此策略，则勾选待解绑的API，单击列表上方"解绑"。最多同时解绑1000个API。
   
   
   
   
 
#### 相关文档
- APIG在传统流量控制策略的基础上提供了插件流量控制2.0策略，通过制定更加精细的方案来进行流控。例如，创建流量控制2.0策略来应对不同场景的网关限流。具体操作请参考[使用APIG专享版的流量控制2.0策略实现API的精细流控](https://support.huaweicloud.com/bestpractice-apig/apig-bp-0008.html)。
- 相关错误码。
  
  | 错误码       | 错误现象                                       | HTTP状态码 | 语义      | 解决方案                                |
  |:---|:---|:---|:---|:---|
  | APIG.0308 | The throttling threshold has been reached. | 429     | 超出流控值限制 | 等待流控刷新后访问。如果触发调试域名的单日请求数上限，请绑定独立域名。 |
     
  
 
如果您希望通过API创建流量控制2.0策略，请参考[创建插件](https://support.huaweicloud.com/api-apig/CreatePlugin.html)。
