描述
限制并发请求(或并发连接)插件。
作用范围
该插件即可用于全局插件,也可用于路由级插件。全局插件配置的优先级高于路由级插件配置,当同时在某一路由上配置了limit-conn的全局插件和路由级插件时,以全局插件配置中设置的属性值为准。
属性
名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
conn | integer | 是 | conn > 0 | 允许的最大并发请求数。超过 conn 的限制、但是低于 conn + burst 的请求,将被延迟处理。 | |
burst | integer | 是 | burst >= 0 | 允许被延迟处理的并发请求数。 | |
default_conn_delay | number | 是 | default_conn_delay > 0 | 默认的典型连接(或请求)的处理延迟时间。 | |
only_use_default_delay | boolean | 否 | false | [true,false] | 延迟时间的严格模式。 如果设置为true的话,将会严格按照设置的时间来进行延迟 |
key_type | string | 否 | "var" | ["var", "var_combination"] | key 的类型 |
key | string | 是 | 用来做请求计数的依据。如果 key_type 为 "var",那么 key 会被当作变量名称,如 "remote_addr" 和 "consumer_name"。如果 key_type 为 "var_combination",那么 key 会当作变量组合,如 "remote_addr consumer_name"。如果 key 的值为空,$remote_addr 会被作为默认 key。 | ||
rejected_code | string | 否 | 503 | [200,...,599] | 当请求超过 conn + burst 这个阈值时,返回的 HTTP 状态码 |
rejected_msg | string | 否 | 非空 | 当请求超过 conn + burst 这个阈值时,返回的响应体。 | |
allow_degradation | boolean | 否 | false | 当插件功能临时不可用时是否允许请求继续。当值设置为 true 时则自动允许请求继续,默认值是 false。 |
如何使用
在配置窗口页以YAML格式填写
配置示例
下面是一个示例,开启 limit-conn 插件,并设置 key_type 为 var:
conn: 1
burst: 0
default_conn_delay: 0.1
rejected_code: 503
key_type: "var"
key: "remote_addr"
下面是一个示例,开启了 limit-conn 插件,并设置 key_type 为 var_combination:
conn: 1
burst: 0
default_conn_delay: 0.1
rejected_code: 503
key_type: "var_combination"
key: "$consumer_name $remote_addr"
停用/启用
在配置页面设置生效开关
验证插件
上面启用的插件的参数表示只允许一个并发请求。 当收到多个并发请求时,将直接返回 503 拒绝请求。
curl -i http://127.0.0.1:9080/index.html?sleep=20
<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body>
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>openresty</center>
</body>
</html>
这就表示 limit-conn 插件已经生效了。