
# 转发策略配置
本章介绍通过IaC进行转发策略配置的管理，包括监听下的转发策略、健康检查、后端服务器及动态路由管理。对应的资源类型为WiseCloud::LoadBalancer::SLB::RouteRule。
表1转发策略配置字段说明 
| 参数名               | 类型                                                                      | 是否必选 | 说明                          |
|:---|:---|:---|:---|
| listenerGroupName | String                                                                  | 是    | SLB监听名称，一个转发策略实例只能绑定一个监听实例。 |
| targetGroups      | List\<[TargetGroupConfigBean]\> | 否    | 后端集群。                       |
| routes            | List\<[RouteRule]\>               | 否    | 转发策略（Locations）。            |
| dynamicRoutes     | List\<[DynamicRouteRuleBean]\>   | 否    | 动态路由。                       |
   
 表2TargetGroupConfigBean 
| 参数名          | 类型                                                                  | 是否必选 | 说明                     |
|:---|:---|:---|:---|
| name         | String                                                              | 是    | 后端集群名，不超过150位，不包含特殊字符。 |
| protocol     | String                                                              | 是    | 协议，取值为：HTTP或HTTPS。     |
| loadBalancer | [TargetGroupLoadBalancerBean] | 是    | 后端集群负载均衡类型。            |
| healthCheck  | [TargetGroupHealthCheckBean]  | 否    | 健康检查。                  |
   
 表3TargetGroupLoadBalancerBean 
| 参数名             | 类型     | 是否必选 | 说明                                                                                              |
|:---|:---|:---|:---|
| strategy        | String | 是    | 负载均衡算法，支持"roundRobin"、"protocolParam"、"IP_HASH"、"least_conn"。                                   |
| slowStartDelay  | int    | 否    | 预热时延，不超过30。                                                                                     |
| slowStartPeriod | int    | 否    | 预热周期，不超过30。                                                                                     |
| slowStartFactor | int    | 否    | 预热因子，默认为10，不小于1，不超过100。                                                                         |
| hashParam       | String | 否    | 哈希转发字段名，Strategy类型为protocolParam时必填 长度不超过50，由字母加数字，下划线，横杠，点组成。 |
| customParam     | String | 否    | 自定义参数，不包含by_lua。                                                                                |
   
默认取第一个后端集群的健康检查配置，如果为空，使用默认值。
 表4TargetGroupHealthCheckBean 
| 参数名                | 类型     | 是否必选 | 说明                                |
|:---|:---|:---|:---|
| switchStatus       | String | 否    | 是否开启健康检查，取值为on或off，不填或者其他字符均为off。 |
| protocol           | String | 否    | 协议，默认HTTP，不可修改。                   |
| path               | String | 否    | 检查路径，长度不超过500，由字母、数字、横杠、下划线和点组成。  |
| successCodes       | String | 否    | 成功码列表，100-600之间的数字，以逗号隔开。         |
| healthyThreshold   | int    | 否    | 健康阈值，取值范围2-10，默认为2。               |
| interval           | int    | 否    | 探测间隔时间，取值范围1-50，默认为5。             |
| timeout            | int    | 否    | 探测超时时间，取值范围1-300，默认为10。           |
| unhealthyThreshold | int    | 否    | 不健康阈值，取值范围2-10，默认为3。              |
   
 表5RouteRule 
| 参数名             | 类型                                                                   | 是否必选 | 说明                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| location        | String                                                               | 否    | 转发策略地址，长度不超过500，非中文。                                                                                                                                                                                                                                                                                    |
| targetGroup     | String                                                               | 否    | 后端集群名，长度不超过150，由字母、数字、下划线、横杠和点组成。                                                                                                                                                                                                                                                                       |
| grayServiceName | String                                                               | 否    | 灰度规则                                                                                                                                                                                                                                                                                                    |
| degradeUrl      | String                                                               | 是    | 降级url - 不降级：unDegrade  - 默认降级：defaultDegrade   只有值为defaultDegrade时才为默认降级，其他值均认为是不降级。 |
| configs         | [GeneralAndAdvancedConfigBean] | 否    | 通用与高级配置                                                                                                                                                                                                                                                                                                 |
   
 表6DynamicRouteRuleBean 
| 参数名                | 类型                                                                  | 是否必选 | 说明                                               |
|:---|:---|:---|:---|
| name               | String                                                              | 是    | 名称，长度不超过50，由字母、数字、下划线、横杠和点组成，不能包含-in-且不能以-in结尾。  |
| switchStatus       | String                                                              | 是    | 开关，取值为on或off。                                    |
| defaultTargetGroup | String                                                              | 是    | 默认后端集群。                                          |
| enableGrey         | String                                                              | 是    | 默认后端集群是否仍参考灰度进行分流，取值为on/off，默认为off，只有输入on才为打开状态。 |
| rules              | List\<[DynamicSubRuleBean]\> | 否    | 动态路由规则。                                          |
| locations          | List\<String\>                                                      | 否    | 动态路由关联的转发策略列表。                                   |
   
 表7DynamicSubRuleBean 
| 参数名         | 类型     | 是否必选 | 说明                                         |
|:---|:---|:---|:---|
| condition   | String | 是    | 名称。                                        |
| targetGroup | String | 是    | 后端集群。                                      |
| enableGray  | String | 是    | 是否仍参考灰度进行分流，取值为on/off，默认为off，只有输入on才为打开状态。 |
   
 表8GeneralAndAdvancedConfigBean 
| 参数名                        | 类型                                 | 是否必选 | 说明                                                                                                                                                                   |
|:---|:---|:---|:---|
| proxyReadTimeout           | int                                | 否    | 响应超时时间，不超过10位的数字。                                                                                                                                                    |
| proxySendTimeout           | int                                | 否    | 转发超时时间，不超过10位的数字。                                                                                                                                                    |
| keepaliveSwitch            | String                             | 否    | 启用长连接转发，是否keepalive。                                                                                                                                                 |
| hostSwitch                 | String                             | 否    | 是否透传请求头，取值为on/off，不填或者其他字符均为off。                                                                                                                                     |
| xForwardedForSwitch        | String                             | 否    | 是否追加XFF。                                                                                                                                                             |
| accessLogSwitch            | String                             | 否    | 是否开启access日志，取值为on/off，不填或者其他字符均为off。                                                                                                                                |
| proxyNextUpstreamSwitch    | String                             | 否    | 是否在异常时尝试下一台机器，取值为on/off，不填或者其他字符均为off。                                                                                                                               |
| proxyNextUpstreamCondition | String                             | 否    | 尝试下一台机器的场景，取值为403、404、429、500、502、503、504、error、timeout、invalid_header。                                                                                              |
| clientConnectionFreeTime   | int                                | 否    | 客户端连接空闲时间，不超过10位的正整数。                                                                                                                                                |
| proxyBuffersSwitch         | String                             | 否    | 开启响应缓存，取值为on/off，不填或者其他字符均为off。                                                                                                                                      |
| proxyBuffersSize           | String                             | 否    | 响应缓存大小，数字+空格+k/m 组成，默认8 k。                                                                                                                                           |
| expiresSwitch              | String                             | 否    | 高级配置中Expires开关，取值为on/off，不填或者其他字符均为 off。                                                                                                                             |
| expiresSize                | String                             | 否    | 设定页面缓存时间，不缓存或一直使用缓存。可以由字母、数字、空格、 $@+- 、冒号、逗号组成，长度不超过50位。                                                                                                             |
| indexPage                  | String                             | 否    | 静态页面场景index页面设置，长度不超过255，非中文。                                                                                                                                        |
| returnVal                  | String                             | 否    | 固定返回响应码，长度不超过255，非中文。                                                                                                                                                |
| allowMethod                | String                             | 否    | 允许的http方法，对于转发策略有效，对于监听仅为参考，在界面新增转发策略时会继承监听的此项配置，其余场景无效，GET、HEAD、POST、DELETE、PUT、OPTIONS、PATCH、MKCOL、COPY、MOVE、PROPFIND、PROPPATCH、LOCK、UNLOCK。                       |
| nuwaTraceSwitch            | String                             | 否    | 消息头中透传nuwatrace相关的网元身份标识和时间戳。                                                                                                                                        |
| command                    | String                             | 否    | 高级配置，自定义参数设置。 不要直接填写转发到某个集群的名称，例如proxy_pass http://upstreamName，这样配置会使得动态加载配置失效。 nginx配置命令，非中文。 |
| root                       | String                             | 否    | 默认资源根目录，长度不超过500，非中文。                                                                                                                                                |
| clientMaxBodySize          | String                             | 否    | 最大请求体大小，数字+空格+k/m组成。                                                                                                                                                 |
| clientBodyBufferSize       | String                             | 否    | 请求体buffer大小，数字+空格+k/m 组成。                                                                                                                                            |
| addHeaders                 | List\< GeneralKeyValueConfigBean\> | 否    | 响应头。                                                                                                                                                                 |
| setVals                    | List\< GeneralKeyValueConfigBean\> | 否    | 对应页面set。                                                                                                                                                             |
| proxySetHeaders            | List\< GeneralKeyValueConfigBean\> | 否    | 请求头。                                                                                                                                                                 |
| redirects                  | List\< GeneralRedirectConfigBean\> | 否    | 重定向。                                                                                                                                                                 |
| rewrites                   | List\< GeneralRedirectConfigBean\> | 否    | 重写。                                                                                                                                                                  |
   
转发策略模板yaml
```
- name: hw_test                                  // 必填项，不可修改，不可重复
  type: WiseCloud::LoadBalancer::SLB::RouteRule  // 资源类型为转发策略配置
  properties:
    routes:                                     // 非必填
      - targetGroup: group1
        grayServiceName: grayServce_hw
        location: /abc_hw1
        degradeUrl: unDegrade                  // 必填项，unDegrade不降级，defaultDegrade默认降级
        configs:
          hostSwitch: 'off'
          addHeaders:
            - value: b
              key: aaa
          clientConnectionFreeTime: 60
          rewrites:
            - source: /test
              option: break
              target: /test_hw
          proxyReadTimeout: 60
          setVals:
            - value: bbb
              key: aaa
          keepaliveSwitch: 'off'
          proxyBuffersSize: 2 m
          expiresSwitch: 'on'
          proxyBuffersSwitch: 'on'
          accessLogSwitch: 'on'
          clientMaxBodySize: 3 k
          clientBodyBufferSize: 2 k
          expiresSize: 2 m
          proxyNextUpstreamCondition: 'error,timeout'
          proxySendTimeout: 60
          xForwardedForSwitch: 'off'
          proxyNextUpstreamSwitch: 'on'
          allowMethod: 'POST,PUT,DELETE'
    targetGroups:                                // 非必填
      - protocol: HTTP                           // 必填项
        loadBalancer:                            // 必填项，负载均衡类型
          strategy: roundRobin                   // 必填项，负载均衡策略
        healthCheck:                             // 非必填，健康检查
          path: /abc_test
          protocol: HTTP                         // 固定项
          successCodes: '200,302'
          healthyThreshold: '2'
          unhealthyThreshold: '3'
          switchStatus: 'on'                     // 默认关闭，on为打开，打开时，不传其他参数均使用默认值
        name: group1                             // 必填项，并且不可重复，长度不超过150，不包含特殊字符
      - protocol: HTTP
        loadBalancer:
          hashParam: $xxx
          strategy: protocolParam
          customParam: $xxx
        healthCheck:
          switchStatus: 'off'
        name: group2
    listenerGroupName: zwx_listener1             // 必填项，SLB监听名称，一个转发策略实例只能绑定一个监听实例
    dynamicRoutes:                               // 非必填
      - enableGrey: 'off'
        defaultTargetGroup: group1               // 必填并且存在于targetGroups中
        name: /abc_test1_hw
        locations:
          - location: /abc_hw1
        rules:
          - targetGroup: group1
            enableGray: 'off'
        switchStatus: 'on'
```
