参数
有关所有插件均可使用的配置项,请参阅插件通用配置。
该插件支持使用 env:// 前缀从环境 变量引用参数值,也支持使用 secret:// 前缀从密钥管理器(例如 HashiCorp Vault 的 KV 密钥引擎)引用参数值。有关更多信息,请参阅插件中的环境变量和密钥。
count
有效值:
大于 0
给定时间间隔内允许的最大请求数。
字符串值可以通过在变量前添加美元符号(
$)来引用内置变量。自 API7 企业版 3.9.14 和 3.10.1 以及 APISIX 3.16.0 起引入。更早的版本仅接受整数值。未配置
rules时,此字段必须与time_window一起配置。不要同时配置count或time_window与rules。字符串值必须解析为不大于
9007199254740991的正整数。无效值会返回500 Internal Server Error,除非allow_degradation为true。自 API7 企业版 3.9.16 和 3.10.2 以及 APISIX 3.18.0 起引入。time_window
有效值:
大于 0
与速率限制
count对应的时间间隔,单位为秒。字符串值可以通过在变量前添加美元符号(
$)来引用内置变量。自 API7 企业版 3.9.14 和 3.10.1 以及 APISIX 3.16.0 起引入。更早的版本仅接受整数值。未配置
rules时,此字段必须与count一起配置。不要同时配置count或time_window与rules。字符串值必须解析为不大于
9007199254740991的正整数。无效值会返回500 Internal Server Error,除非allow_degradation为true。自 API7 企业版 3.9.16 和 3.10.2 以及 APISIX 3.18.0 起引入。key_type
有效值:
var、var_combination或constant密钥类型。
如果
key_type为var,则key将被解释为变量。如果
key_type为var_combination,则key将 被解释为变量组合。如果
key_type为constant,则key将被解释为常量。key
用于计数请求的密钥。
如果
key_type为var,则key将被解释为变量。变量不需要以美元符号($)作为前缀。请参阅内置变量以获取可用变量。如果
key_type为var_combination,则key将被解释为变量组合。所有变量都应以美元符号($)作为前缀。例如,要配置key使用两个请求头custom-a和custom-b的组合,则key应配置为$http_custom_a $http_custom_b。如果
key_type为constant,则key将被解释为常量值。rejected_code
有效值:
介于 200 和 599 之间(含边界值)
当请求因超过阈值而被拒绝时返回的 HTTP 状态码。
rejected_msg
有效值:
任意非空字符串
当请求因超过阈值而被拒绝时返回的响应体。
policy
有效值:
local、redis、redis-cluster或redis-sentinel速率限制计数器的策略。API7 企业版中为必填项,APISIX 中为可选项。
限速计数器的策略。如果为
local,则计数器存储在本地内存中。如果为redis,则计数器存储在 Redis 实例上。如果为redis-cluster,则计数器存储在 Redis 集群中。如果为redis-sentinel,则计数器存储在由 Redis Sentinel 管理的 Redis 节点上,以实现高可用。redis-sentinel通过由 Sentinel 管理的故障转移提供高可用性。自 API7 企业版 3.9.14 和 3.10.1 以及 APISIX 3.18.0 起引入。window_type
有效值:
fixed或sliding限速窗口算法。如果为
fixed,则使用固定窗口算法,每个时间窗口独立地实施配额。如果为sliding,则使用滑动窗口算法,在计算当前计数时对上一个窗口进行加权,从而平滑窗口边界处的突发流量。自 API7 企业版 3.9.14 和 3.10.1 以及 APISIX 3.18.0 起引入。
sync_interval
有效值:
-1,或大于或等于0.1;必须小于数值类型的顶层time_window将本地计数器同步到共享存储(Redis)的时间间隔(以秒为单位)。仅当
policy为redis、redis-cluster或redis-sentinel时生效。取值为-1时禁用延迟同步,每个请求都直接同步。启用时,取值不应小于0.1且应小于time_window。启用延迟同步可减少访问共享存储的往返次数,但代价是限速实施略微宽松。运行时,如果适用的
time_window小于或等于sync_interval,网关会对该请求回退为直接同步。这可能发生在请求时求值的变量解析值或rules内的值上。自 API7 企业版 3.9.14 和 3.10.1 以及 APISIX 3.18.0 起引入。
allow_degradation
如果为 true,则在计数器后端失败,或变量解析的
count或time_window无效时,继续处理请求但不进行速率限制。如果为 false,这些失败会返回500 Internal Server Error。show_limit_quota_header
如果为 true,则在响应中包含配额响应头。
使用默认名称时,
X-RateLimit-Limit表示总配额,X-RateLimit-Remaining表示窗口内剩余的请求数,X-RateLimit-Reset表示计数器重置前的秒数。可以通过插件元数据重命名这些响应头。配置
rules时,每条规则会在RateLimit-前插入其header_prefix(省略时使用规则索引),使各规则的 Limit、Remaining 和 Reset 保持可区分。请参阅rules.header_prefix。group
有效值:
非空
插件的
groupID,以便同一group的路由可以共享相同的限速计数器。redis_host
Redis 节点的地址。当
policy为redis时必填。redis_port
有效值:
大于或等于 1
当
policy为redis时 Redis 节点的端口。redis_username
如果使用 Redis ACL,则为 Redis 用户名。如果你使用传统的身份验证方法
requirepass,请仅配置redis_password。当policy为redis或redis-sentinel时使用。redis_password
当
policy为redis、redis-cluster或redis-sentinel时 Redis 节点的密码。该密码在 API7 企业版中静态加密。在 APISIX 中,请启用数据加密,使其在存储到 etcd 前加密。加密功能自 API7 企业版 3.9.16 和 3.10.2 以及 APISIX 3.18.0 起引入。redis_database
有效值:
大于或等于 0
当
policy为redis或redis-sentinel时 Redis 中的数据库编号。redis_ssl
如果为 true,则在
policy为redis时使用 SSL 连接到 Redis。redis_ssl_verify
如果为 true,则在
policy为redis时验证服务器 SSL 证书。redis_timeout
有效值:
大于或等于 1
当
policy为redis或redis-cluster时的 Redis 超时值(以毫秒为单位)。redis_keepalive_timeout
有效值:
对
redis和redis-cluster大于或等于 1000;对redis-sentinel大于或等于 1Redis 连接的保活超时时间(毫秒)。当
policy为redis或redis-cluster时,默认值为10000,最小值为1000;当policy为redis-sentinel时,默认值为60000,最小值为1。自 API7 企业版 3.9.16 和 3.10.3 以及 APISIX 3.15.0 起引入。Sentinel 默认值自 API7 企业版 3.9.14 和 3.10.1 以及 APISIX 3.18.0 起引入。
redis_keepalive_pool
有效值:
大于或等于 1
当
policy为redis或redis-cluster时的 Redis keepalive 连接池大小。此参数自 API7 企业版 3.9.16 和 3.10.3 以及 APISIX 3.15.0 起可用。
redis_cluster_nodes
Redis 集群节点列表,至少包含两个地址。当
policy为redis-cluster时必填。redis_cluster_name
Redis 集群的名称。当
policy为redis-cluster时必填。redis_cluster_ssl
如果为 true,则在
policy为redis-cluster时使用 SSL 连接到 Redis 集群。redis_cluster_ssl_verify
如果为 true,则在
policy为redis-cluster时验证服务器 SSL 证书。redis_sentinels
Redis Sentinel 节点列表,至少包含一个节点。当
policy为redis-sentinel时必填。每个节点为一个对象,包含host(字符串)和port(介于 1 到 65535 之间 的整数)。自 API7 企业版 3.9.14 和 3.10.1 以及 APISIX 3.18.0 起可用。
redis_master_name
由 Sentinel 监控的 Redis 主节点名称。当
policy为redis-sentinel时必填。自 API7 企业版 3.9.14 和 3.10.1 以及 APISIX 3.18.0 起可用。
redis_role
有效值:
master或slave当
policy为redis-sentinel时要连接的 Redis 节点角色。使用master进行读写操作,或使用slave连接只读副本。自 API7 企业版 3.9.14 和 3.10.1 以及 APISIX 3.18.0 起可用。
redis_connect_timeout
有效值:
大于或等于 1
当
policy为redis-sentinel时的连接超时时间(以毫秒为单位)。自 API7 企业版 3.9.14 和 3.10.1,以及 APISIX 3.18.0 起可用。
redis_read_timeout
有效值:
大于或等于 1
当
policy为redis-sentinel时的读取超时时间(以毫秒为单位)。自 API7 企业版 3.9.14 和 3.10.1,以及 APISIX 3.18.0 起可用。
sentinel_username
当
policy为redis-sentinel时用于向 Redis Sentinel 节点进行身份验证的用户名。自 API7 企业版 3.9.14 和 3.10.1,以及 APISIX 3.18.0 起可用。
sentinel_password
当
policy为redis-sentinel时用于向 Redis Sentinel 节点进行身份验证的密码。自 API7 企业版 3.9.14 和 3.10.1 以及 APISIX 3.18.0 起引入。
该密码在 API7 企业 版中静态加密。在 APISIX 中,请启用数据加密,使其在存储到 etcd 前加密。加密功能自 API7 企业版 3.9.16 和 3.10.2 以及 APISIX 3.18.0 起引入。
rules
按顺序应用的速率限制规则数组。不要同时配置
rules与顶层count、time_window或group字段。规则模式不使用顶层key和key_type。规则的键必须唯一。如果请求中不存在规则的key变量,则跳过该规则。自 API7 企业版 3.9.14 和 3.10.1 以及 APISIX 3.16.0 起引入。
count
有效值:
大于 0
给定
time_window内允许的最大请求数。此参数还支持字符串类型,并允许使用以美元符号(
$)为前缀的内置变量。字符串值必须解析为不大于
9007199254740991的正整数。如果规则适用但值无效,请求 会返回500 Internal Server Error,除非allow_degradation为true。自 API7 企业版 3.9.16 和 3.10.2 以及 APISIX 3.18.0 起引入。time_window
有效值:
大于 0
速率限制
count对应的时间间隔,单位为秒。此参数还支持字符串类型,并允许使用以美元符号(
$)为前缀的内置变量。字符串值必须解析为不大于
9007199254740991的正整数。如果规则适用但值无效,请求会返回500 Internal Server Error,除非allow_degradation为true。自 API7 企业版 3.9.16 和 3.10.2 以及 APISIX 3.18.0 起引入。key
解析为此规则请求计数键的变量表达式。每个 APISIX 内置变量或 NGINX 变量都必须以美元符号(
$)开头,例如$remote_addr或$remote_addr $http_x_tenant。顶层
key_type不适用于规则 。无法解析变量的规则会针对该请求被跳过。header_prefix
插入到此规则配额响应头中
RateLimit-之前的前缀,使每条规则保持可区分。使用默认名称时,foo会生成X-foo-RateLimit-Limit、X-foo-RateLimit-Remaining和X-foo-RateLimit-Reset。这些响应头仍分别表示总配额、剩余配额和重置前秒数。省略时使用规则的数组索引,因此第一条规则会生成X-1-RateLimit-Limit。仅在show_limit_quota_header为true时发送。
插件元数据
limit_header
表示速率限制总配额的默认响应头名称。
remaining_header
表示速率限制剩余配额的默认响应头名称。
reset_header
表示速率限制计数器重置前剩余秒数的默认响应头名称。