本章介绍如何配置限流功能。该功能将限制特定请求的速率,以对后端服务进行保护。

开启限流模块

在conf/bfe.conf中,打开该模块

Modules = mod_prison

模块配置

模块配置在目录conf/mod_redirect/中,包含两个文件:

# ls
mod_prison.conf    prison.data

与其他模块配置相似,mod_prison.conf为模块基础配置文件,指向redirect规则文件。

[basic]
ProductRulePath = mod_prison/prison.data

示例的prison.data如下:

{
    "Version": "1",
    "Config": {
        "example_product": [{
            "Name": "example_prison",
            "Cond": "req_path_prefix_in(\"/prison\", false)",
            "accessSignConf": {
                "url": false,
                "path": false,
                "query": [],
                "header": [],
                "Cookie": [
                    "UID"
                ]
            },
            "action": {
                "cmd": "CLOSE",
                "params": []
            },
            "checkPeriod": 10,
            "stayPeriod": 10,
            "threshold": 5,
            "accessDictSize": 1000,
            "prisonDictSize": 1000
        }]
    }
}

上述示例对路径为“/prison”的请求进行限流。其中,”accessSignConf”指示了限制的流量的维度,具体见后续描述。本例子中,将统计cookies中的”UID”,限制不同”UID”的访问流量。

限制特定维度的流量

通过accessSignConf字段,我们可以指定请求统计的维度,判断统计值是否达到限流阈值。
可配置的维度包括:

  • UseClientIP

对请求按clientIp进行统计做限流。可以限制每个clientIP的请求速度。

  • UseUrl:

对请求按URL进行统计。可以限制对每一个URL的请求速度。

  • UseHost

对请求按Host进行统计。可以限制对每一个Host的请求速度。

  • UsePath

对请求按Path进行统计。可以限制对每一种Path的请求速度。

  • UrlRegexp

对请求的URL做正则匹配,以匹配结果为维度进行统计。可以实现按URL中的部分内容来进行限流。

  • header

以请求的特定Header为维度来做统计流量。可以限制该Header所标识的每一种消息的请求速度。

  • Cookie

以请求中的特定Cookie为维度进行统计。可以限制该Cookie标识的每一种请求的请求速度。比如,如果我们用Cookie中的UID来标识不同用户,可以通过指定UID,来限制每个用户的访问速度。

  • query

以指定的query为维度,统计请求量来做限流。

  • UseHeaders

以每个请求中的所有Header为维度来进行统计(合并一个消息的所有header)。限制不同Header的每一种消息的请求速度。

设置限流门限

通过下述参数配置限流:

  • checkPeriod

设置统计周期,单位秒。

  • stayPeriod

被限流后的惩罚时长。在该时间段内,该维度访问请求都将被限制。

  • threshold

限制的阈值。一个维度的统计数量达到该阈值将触发限流。

  • accessDictSize

访问统计表的大小。统计表保存了当前配置的维度的所有统计值。比如,如果以ClientIp为维度进行的统计,该表包含每个ClientIp的访问量。

  • prisonDictSize

访问封禁表的大小。按维度统计后,每类命中限流的请求,都会被保存在封禁表中。所以,封禁表保存了当前所有处于封禁状态的某类请求。比如某频繁访问,被限流的IP地址等。

设置限流动作

某类请求命中限流规则后,可以在”action”中配置对该类请求的后续动作。

  • CLOSE

直接关闭请求的连接。

  • PASS

正常转发,不做任何处理。

  • FINISH

响应后关闭连接。

  • REQ_HEADER_SET

正常转发,在请求header中插入指定key和value。key和value在params中指定。

最后编辑: kuteng  文档更新时间: 2021-05-09 11:40   作者:kuteng