
# 创建转发策略 - CreateL7policy
#### 功能介绍
创建转发策略。监听器和转发策略共同决定了流量如何转发到后端云服务器上。
- 通过匹配action为REDIRECT_TO_POOL的转发策略下的转发规则的url和域名，可以将匹配的流量转发到指定的后端云服务器组上，再将流量分发到在这个后端云服务器组关联的后端云服务器上。
- 可以通过创建action为REDIRECT_TO_LISTENER的转发策略，将HTTP监听器的流量都重定向到TERMINATED_HTTPS监听器上，实现请求协议的重定向。
 
#### 接口约束
当前只支持HTTP协议跳转到HTTPS协议。即当转发策略的action为REDIRECT_TO_LISTENER时，转发策略的listener_id指定的监听器只支持HTTP类型的监听器，redirect_listener_id指定的监听器只支持TERMINATED_HTTPS类型的监听器。
转发策略的redirect_listener只能指定为转发策略所在负载均衡器下的监听器。
#### 调试
您可以在[API Explorer](https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=ELB&api=CreateL7policy&version=v2)中直接运行调试该接口。
#### URI
POST /v2/{project_id}/elb/l7policies
表1参数说明 
| 参数         | 是否必选 | 参数类型   | 描述                                                                                                                   |
|:---|:---|:---|:---|
| project_id | 是    | String | 操作用户的项目ID。 获取方法详见[获取项目ID](https://support.huaweicloud.com/api-elb/elb_fl_0008.html)。 |
   
#### 请求消息
表2请求参数 
| 参数       | 是否必选 | 参数类型                                                     | 描述                                                    |
|:---|:---|:---|:---|
| l7policy | 是    | [L7policy] object | 转发策略对象。详见[表3]。 |
   
 表3l7policy字段说明 
| 参数                   | 是否必选 | 参数类型                                                           | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| tenant_id            | 否    | String                                                         | 转发策略所在的项目ID。 获取方法详见[获取项目ID](https://support.huaweicloud.com/api-elb/elb_fl_0008.html)。 需要和token中的project_id一致。 支持的最大字符长度：255                                                                                                                                                                                                                                                                        |
| name                 | 否    | String                                                         | 转发策略名称。 支持的最大字符长度：255                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| admin_state_up       | 否    | Boolean                                                        | 转发策略的管理状态。只支持设置为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| description          | 否    | String                                                         | 转发策略的描述信息。 支持的最大字符长度：255                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| listener_id          | 是    | String                                                         | 转发策略所在的监听器ID。 - 当action为REDIRECT_TO_POOL时，只支持创建在PROTOCOL为HTTP或TERMINATED_HTTPS的listener上；  - 当action为REDIRECT_TO_LISTENER时，只支持创建在PROTOCOL为HTTP的listener上。                                                                                                                                              |
| action               | 是    | String                                                         | 转发策略的转发动作。 取值范围： - REDIRECT_TO_POOL：将匹配的流量转发到redirect_pool_id指定的后端云服务器组上；  - REDIRECT_TO_LISTENER：将listener_id指定的HTTP监听器的流量重定向到redirect_listener_id指定的TERMINATED_HTTPS监听器上。                                                                                     |
| redirect_pool_id     | 否    | String                                                         | 流量匹配后转发到后端云服务器组的ID。默认值：null； 当action为REDIRECT_TO_POOL时为必选字段。 当action为REDIRECT_TO_LISTENER时，不可指定该字段。 指定的后端云服务器组需满足以下条件： - 不能是监听器的default_pool；  - 不能是除该转发策略所在的监听器以外的其他监听器的转发策略使用的后端云服务器组。   |
| redirect_listener_id | 否    | String                                                         | 流量匹配后转发到的监听器的ID。默认值：null； 当action为REDIRECT_TO_LISTENER时为必选字段。 当action为REDIRECT_TO_POOL时不可指定。 - 只支持指定为protocol为TERMINATED_HTTPS的listener。  - 只支持指定为当前转发策略所在的负载均衡器下的监听器。                                                      |
| redirect_url         | 否    | String                                                         | 转发策略重定向到的url。默认值：null； 该字段为预留字段，暂未启用。 支持的最大字符长度：255                                                                                                                                                                                                                                                                                                                                                                                   |
| position             | 否    | Integer                                                        | 转发优先级，从1递增，最高100。默认值：100； 该字段为预留字段，暂未启用。                                                                                                                                                                                                                                                                                                                                                                                                                               |
| rules                | 否    | Array of [Rules] objects | 转发策略关联的转发规则对象。详细参考[表4]。 rules列表中最多含有2个rule对象，且每个rule的type字段不可相同。                                                                                                                                                                                                                                                                                                                                                               |
   
 表4rules字段说明 
| 属性             | 类型      | 必选 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| admin_state_up | Boolean | 否  | 转发规则的管理状态。只支持设置为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| type           | String  | 是  | 转发规则的匹配类型。 取值范围： - HOST_NAME：匹配请求中的域名；  - PATH：匹配请求中的路径；   同一个转发策略下转发规则的type不能重复。                                                                                                                                                                                                                                                                                                                                              |
| compare_type   | String  | 是  | 转发匹配方式： type为HOST_NAME时，取值范围： - EQUAL_TO：精确匹配；   type为PATH时，取值范围： - REGEX：正则匹配；  - STARTS_WITH：前缀匹配；  - EQUAL_TO：精确匹配。   |
| invert         | Boolean | 否  | 是否反向匹配； 取值范围：true/false。默认值：false； 该字段为预留字段，暂未启用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| key            | String  | 否  | 匹配内容的键值。默认为null。 该字段为预留字段，暂未启用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| value          | String  | 是  | 匹配内容的值。不能包含空格。 - 当type为HOST_NAME时，取值范围：String (100)，字符串只能包含英文字母、数字、"-"或"."，且必须以字母或数字开头。  - 当type为PATH时，取值范围：String (128)。当转发规则的compare_type为STARTS_WITH、EQUAL_TO时，字符串只能包含英文字母、数字、_\~';@\^-%#\&$.\*+?,=!:\| \\/()\[\]{}，且必须以"/"开头。                                                                                                                                                                                                                                              |
   
#### 响应消息
表5响应参数 
| 参数       | 参数类型                                                                  | 描述                                                                 |
|:---|:---|:---|
| l7policy | [L7policy] object | 转发策略对象。详见[表6]。 |
   
 表6l7policy字段说明 
| 参数                   | 参数类型                                                            | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|
| id                   | String                                                          | 转发策略ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| tenant_id            | String                                                          | 转发策略所在的项目ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| project_id           | String                                                          | 此参数和tenant_id参数含义一样，均指转发策略所在的项目ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| name                 | String                                                          | 转发策略名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| admin_state_up       | Boolean                                                         | 转发策略的管理状态。只支持设置为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| description          | String                                                          | 转发策略的描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| listener_id          | String                                                          | 转发策略所在的监听器ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| action               | String                                                          | 转发策略的匹配动作。 取值范围： - REDIRECT_TO_POOL：将匹配的流量转发到redirect_pool_id指定的后端云服务器组上；  - REDIRECT_TO_LISTENER：将listener_id指定的HTTP监听器的流量重定向到redirect_listener_id指定的TERMINATED_HTTPS监听器上。   |
| redirect_pool_id     | String                                                          | 流量匹配后转发到后端云服务器组的ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| redirect_listener_id | String                                                          | 流量匹配后转发到的监听器的ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| redirect_url         | String                                                          | 转发策略重定向到的url。 该字段为预留字段，暂未启用。                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| rules                | Array of [Rules] objects | 转发策略关联的转发规则的ID列表。详见[表7]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| position             | Integer                                                         | 转发优先级，从1递增，最高100。默认值：100； 该字段为预留字段，暂未启用。                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| provisioning_status  | String                                                          | 该字段为预留字段，暂未启用。 转发策略的配置状态，可以为ACTIVE。                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   
 表7rules字段说明 
| 参数 | 参数类型   | 描述        |
|:---|:---|:---|
| id | String | 关联的转发规则id |
   
#### 请求示例
- 请求样例1 创建转发策略，转发到后端云服务器组
  ```
  POST https://{Endpoint}/v2/573d73c9f90e48d0bddfa0eb202b25c2/elb/l7policies
  {
      "l7policy": {
          "name": "niubiao_yaqing_api-2", 
          "listener_id": "3e24a3ca-11e5-4aa3-abd4-61ba0a8a18f1", 
          "action": "REDIRECT_TO_POOL", 
          "redirect_pool_id": "6460f13a-76de-43c7-b776-4fefc06a676e", 
          "rules": [
              {
                  "type": "PATH", 
                  "compare_type": "EQUAL_TO", 
                  "value": "/test"
              }, 
              {
                  "type": "HOST_NAME", 
                  "compare_type": "EQUAL_TO", 
                  "value": "www.test.com"
              }
          ]
      }
  }
  ```
  
- 请求样例2 创建重定向
  ```
  POST https://{Endpoint}/v2/{project_id}/elb/l7policies
  {
      "l7policy": {
          "action": "REDIRECT_TO_LISTENER", 
          "listener_id": "4ef8553e-9ef7-4859-a42d-919feaf89d60", 
          "redirect_listener_id": "3ee10199-a7b4-4784-93cd-857afe9d0890", 
          "name": "redirect-test"
      }
  }
  ```
  
 
#### 响应示例
- 响应样例1
  ```
  {
      "l7policy": {
          "redirect_pool_id": "6460f13a-76de-43c7-b776-4fefc06a676e", 
          "description": "", 
          "admin_state_up": true, 
          "rules": [
              {
                  "id": "742600d9-2a14-4808-af69-336883dbb590"
              }, 
              {
                  "id": "3251ed77-0d52-412b-9310-733636bb3fbf"
              }
          ], 
          "tenant_id": "573d73c9f90e48d0bddfa0eb202b25c2", 
          "listener_id": "3e24a3ca-11e5-4aa3-abd4-61ba0a8a18f1", 
          "redirect_url": null, 
          "redirect_listener_id": null, 
          "action": "REDIRECT_TO_POOL", 
          "position": 100, 
          "provisioning_status": "ACTIVE", 
          "project_id": "573d73c9f90e48d0bddfa0eb202b25c2", 
          "id": "65d6e115-f179-4bcd-9bbb-1484e5f8ee81", 
          "name": "niubiao_yaqing-_api-2"
      }
  }
  ```
  
- 响应样例2
  ```
  {
      "l7policy": {
          "redirect_pool_id": null, 
          "description": "", 
          "admin_state_up": true, 
          "rules": [ ], 
          "tenant_id": "573d73c9f90e48d0bddfa0eb202b25c2", 
          "listener_id": "4ef8553e-9ef7-4859-a42d-919feaf89d60", 
          "redirect_url": null, 
          "redirect_listener_id": "3ee10199-a7b4-4784-93cd-857afe9d0890", 
          "action": "REDIRECT_TO_LISTENER", 
          "position": 100, 
          "provisioning_status": "ACTIVE", 
          "project_id": "573d73c9f90e48d0bddfa0eb202b25c2", 
          "id": "bc4e4338-480f-4a98-8245-5bb1964f0e1d", 
          "name": "redirect-test"
      }
  }
  ```
  
 
#### 返回码
请参见[状态码](https://support.huaweicloud.com/api-elb/elb_gc_1102.html)。
