插件通用配置
插件通用配置是一组可以通过 _meta 属性普遍应用于所有 APISIX 插件的配置选项。它们可用于配置:
- 插件条件执行
- 插件执行优先级
- 插件禁用
- 插件错误响应
- 在每个插件阶段之前执行自定义代码 (企业版功能)
_meta.filter
你可以使用 _meta.filter 根据请求参数配置插件的条件执行。条件是使用 APISIX 表达式 创建的,并配置为数组。插件仅在满足所有条件时执行。
例如,以下配置在请求的 URI 查询参数 上设置条件。只有 URI 查询参数 version 为 v2 的请求才会触发 proxy-rewrite 插件的执行,该插件在将请求转发到上游之前将请求的 URI 路径重写为 /api/v2:
{
...,
"plugins": {
"proxy-rewrite": {
"uri": "/api/v2",
"_meta": {
"filter": [
["arg_version", "==", "v2"]
]
}
}
}
}
不满足条件的请求将不会重写其 URI 路径,并将按原样转发。
_meta.priority
你可以使用 _meta.priority 来调整同一类型插件(即全局或非全局)在给定阶段内的执行顺序。一旦定义,该值将优先于 配置文件 中定义的默认插件优先级。
假设两个在同一 阶段 运行的插件 limit-count 和 ip-restriction 配置在同一路由上。limit-count 的默认 优先级为 1002,ip-restriction 的默认优先级为 3000。当请求发送到路由时,ip-restriction 首先执行,因为它具有更高的默认优先级值。但是,你可以通过为 limit-count 的 _meta.priority 分配高于 3000 的优先级值(例如 3010)来在 ip-restriction 之前运行 limit-count:
{
...,
"plugins": {
"limit-count": {
...,
"_meta": {
"priority": 3010
}
}
}
}
要了解更多关于全局和非全局插件一起使用时的执行顺序,请参阅 插件执行顺序。
_meta.disable
你可以使用 _meta.disable 禁用插件,而无需从其绑定的对象中完全删除插件。
例如,你可以使用以下配置禁用 proxy-rewrite 插件:
{
"plugins": {
"proxy-rewrite": {
"_meta": {
"disable": true
}
}
}
}
_meta.error_response
你可以使用 _meta.error_response 自定义插件返回的错误响应为固定值。这可用于缓解某些情况下默认错误响应可能引起的复杂性。
例如,你可以自定义 limit-count 插件的错误响应:
{
"plugins": {
"limit-count": {
"count": 1,
"time_window": 60,
"_meta": {
"error_response": {
"message": "You have exceeded the rate limiting threshold."
}
}
}
}
}
如果在 60 秒窗口内向插件绑定的路由发送多个请求,你应该看到以下响应:
{"message":"You have exceeded the rate limiting threshold."}