MSE的Web防护规则面向提供Web服务的应用,针对访问请求中的一些参数项进行精细化的流量控制。对于使用了主流Web框架(Servlet容器、Spring Web、Spring Boot)的应用,MSE实现了API粒度的请求参数解析,通过配置Web防护规则,可以对请求中IP、Host、Header、URL Param等参数维度的资源调用进行流量控制,保护业务与系统的稳定性。本文介绍如何为应用配置Web防护规则。

背景信息

在提供Web服务的场景下,除了API维度的限流降级防护,针对访问请求来源IP、访问请求Param参数等资源调用的限流防护是各种业务场景下能更好保证业务应用正常运行的手段。例如,在一些大流量的Web业务场景下,不仅需要对当前接口进行限制,而需要针对当前访问频次最高的来源IP或访问频次最高的商品ID,有针对性地对其访问进行限制,本示例如下:
  • 对一段时间内最频繁购买的商品ID进行限制,以防击穿缓存而导致大量请求到数据库的情况。
  • 对一段时间内频繁大量访问的来源IP进行限制,防止利用虚假信息恶意刷单。

功能入口

  1. 登录MSE治理中心控制台,并在顶部菜单栏选择地域。
  2. 在左侧导航栏,选择治理中心 > 应用治理
  3. 在右侧的应用卡片里选择对应的应用,单击卡片进入应用。
  4. 进入应用之后,在左侧导航栏,单击接口详情,然后在WEB防护页面下方,单击新增WEB防护规则
  5. 新增WEB防护规则对话框,配置规则信息 :
    1. 选择防护场景页面,修改接口名称,然后单击下一步
    2. 配置防护规则页面,配置防护规则,具体配置参数说明如下:
      参数说明
      选择防护场景
      API选择需配置规则的接口API。
      防护类型默认为WEB防护
      配置防护规则
      参数属性针对所选API的参数属性进行流量控制:
      • Client IP:请求端的IP地址。
        说明 若请求经过代理,会优先尝试从X-Forwarded-For请求头中获取IP信息,如果其IP信息存在,将会使用该IP作为实际请求端IP地址。
      • Remote Host:请求端的Host Header。
      • Header:根据指定的HTTP Header进行解析,如果填写某个具体的Header Key,则该规则针对这个Header Key下面的热点值分别进行限制。选择Header后,可选择配置请求属性值的匹配策略,只有匹配该模式的请求属性值会纳入统计和流控。
      • URL参数:根据指定的HTTP请求参数进行解析,需要填写对应的参数名称。选择URL参数后,可选择配置请求属性值的匹配策略,只有匹配该模式的请求属性值会纳入统计和流控。
      • Body参数:根据指定的HTTP请求Body内容参数进行解析,需要填写对应的参数名称。选择Body参数后,可选择配置请求属性值的匹配策略,只有匹配该模式的请求属性值会纳入统计和流控。
      (可选)匹配模式匹配串若选择参数属性为HeaderURL参数,可打开属性值匹配开关,并设置匹配模式匹配串
      匹配模式
      • 精确:严格按照给定的匹配串来匹配值。
      • 子串:若请求属性值包含该子串则匹配成功。例如,如果子串设置匹配ab,则可以匹配aba和cabc,而无法匹配cba。
      • 正则:按给定的正则表达式匹配串进行匹配。
      阈值类型默认为请求数
      阈值

      触发对流控接口的统计维度对象的QPS阈值。设置时,需选择统计时间间隔,支持秒、分钟、小时和天4种维度。

      例如,若阈值填写为10,统计间隔选择,则表示每分钟对应的请求数目不超过10个。

      高级选项流控方式
      • 快速失败:当阈值类型为QPS时,被拦截的流量将快速失败,即达到阈值时,立即拦截请求。
        说明 被拦截拒绝掉的请求,将返回行为管理中配置的自定义信息,若未配置会返回默认行为,即429错误码加上默认文本信息。
      • 匀速排队:当阈值类型为QPS时,被拦截的请求将匀速通过,允许排队等待。需设置具体的超时时间,预计达到超时时间的请求会立即失败,而不会排队。例如,QPS配置为10,则代表请求每100 ms才能通过一个,多出的请求将排队等待通过。超时时间代表最大排队时间,超出最大排队时间的请求将会直接被拒绝。
        说明 匀速排队时,QPS不要超过1000(请求间隔1 ms)。
      Burst size流控方式选择为快速失败时,可以额外设置一个Burst Size,即针对突发请求额外允许的请求数目。
      超时时间流控方式选择为匀速排队时,需设置具体的超时时间,单位为ms。例如,QPS配置为5,则代表请求每200 ms才能通过一个,多出的请求将排队等待通过。超时时间代表最大排队时间,超出最大排队时间的请求将会直接被拒绝。
      是否开启
      • 开启:Web防护规则创建后即生效。
      • 关闭:Web防护规则创建后不生效。
      配置限流行为
      接口类型默认为Web
      关联行为
      • 默认行为:默认为此选项。
        说明
        • 如您无需自定义限流后处理行为,选择默认行为即可。
        • 默认行为对应应用基础设置 > Web fallback 行为里面配置的全局行为。更多信息,请参见应用基础设置.。
        • 默认行为为返回429错误码加上默认的文本信息。
      • 新增行为:新增自定义限流后处理行为,创建完成后您可在关联行为选择框中下拉选择。更多详细信息,请参见配置Web行为
        参数 描述 示例值
        行为名称 该行为的名称。长度不超过128个字符,同个应用内名称不能重复。 测试行为
        针对的资源类型 包括Web和RPC两种类型,此处选择Web类型。 Web
        Web限流处理策略
        • 该行为的名称。长度不超过128个字符,同个应用内名称不能重复。
        • 跳转到指定页面:需设置指定跳转的URL。表示Web接口访问触发规则后系统会跳转指定的页面URL。
        测试行为
        针对的资源类型 包括Web和RPC两种类型,此处选择Web类型。 Web
        HTTP返回状态码 默认为429。当Web限流处理策略为自定义返回时,需要填写。 429
        针对的资源类型 包括Web和RPC两种类型,此处选择Web类型。 Web
        返回content-type 设置返回内容的格式为普通文本(TEXT)或JSON。当Web限流处理策略为自定义返回时,需要填写。 JSON字符串
        HTTP返回文本 输入当Web接口访问触发规则后返回的内容。当Web限流处理策略为自定义返回时,需要填写。 {"message": "blocked oops"}
        跳转地址 输入当Web接口访问触发规则后系统会跳转的页面URL。当Web限流处理策略为跳转到指定页面时,需要填写。
        说明: 跳转的本质是返回302状态码。对于后端服务直接渲染返回的页面,跳转是有效的;对于前端通过AJAX请求到后端服务后,再解析后端返回到前端展示的页面,跳转无效。
        http://MSE.console.aliyun.com
      • 取消行为:取消接口与关联行为的关联。
      然后单击下一步
      说明 若需对隔离防护规则进行编辑,则直接进入配置防护规则。
    3. 配置防护行为页面,然后单击下一步并单击新增
    4. 在下面规则列表的页面,选择对应的规则并在状态栏下单击开启开启WEB防护规则
    5. 温馨提示页面,单击确定,开启已配置的防护规则。

Web防护规则常用场景

场景一:热点商品秒杀

在秒杀等抢购商品的场景下,由于流量较大,可能会导致系统响应不及时甚至崩溃。为保证系统稳定,可配置热点规则,超过一定阈值后,系统会让购买热点商品的流量排队等待。

例如购买同一商品,希望1秒内同个商品超过100次请求后,对多余的请求进行拒绝,可在新建Web防护规则对话框中配置以下规则信息,表示1秒内,针对热点商品ID进行下单的请求,每个单独商品ID每秒最多只能允许100个请求,其余超出的当前商品下单请求都会被拒绝,返回自定义的信息。
  • 参数属性输入URL参数
    说明 在参数属性中,选择当前热点商品ID所对应的参数字段,例如,假设URL参数中存在一个stockId字段对应请求的商品ID,那么参数属性可以选择URL参数,并在参数名称中填写属性在请求中对应的字段名称。
  • URL参数名称输入stockId。
  • 阈值输入100个请求/每
  • 流控方式选择快速失败
场景一配置

场景二:防止恶意刷单

例如在促销活动中,某些恶意刷单请求较多的时候,会占用较多商品库存或服务器资源。这种情况下可以针对其IP来源进行排队等待的处理,使访问请求匀速通过,防止过量的请求对服务稳定性产生影响。

新建Web防护规则对话框中配置以下规则信息,表示每个不同来源IP调用此接口的请求会以每10 ms一个的速度匀速通过(1s/100=10 ms),后续多余的请求要进行排队等待。排队中的请求如果等待时长超过30 ms就会立即失败。场景二配置
参数说明
参数属性选择Client IP
阈值类型默认选择请求数
阈值输入100个请求/每
流控方式选择匀速排队
超时时间输入30
是否开启选择开启