apisix~response-rewrite响应头重写

在 Apache APISIX 中,将请求头某个值写入到响应头,使用 response-rewrite 插件来实现。

这个插件专门用于在 APISIX 返回响应给客户端之前,修改响应的各种属性,包括状态码、响应体和响应头。

核心方法:在 headers.set 中引用 NGINX 变量

response-rewrite 插件配置中的 headers.set 字段非常关键。它的值可以是一个常量,也可以是一个或多个 NGINX 变量,并且支持使用 $ 前缀来引用。

因为请求头(Request Headers)在 APISIX 处理过程中会被转换成相应的 NGINX 变量,所以你可以直接在 headers.set 中引用它们。

配置示例

下面是一个配置示例,它展示了如何将名为 X-User-Id 的请求头值(注意请求头中的减号要变成下划线),写入到名为 X-User-Id-From-Request 的响应头中:

{
  "plugins": {
    "response-rewrite": {
      "headers": {
        "set": {
          "X-User-Id-From-Request": "$http_x_user_id"
        }
      }
    }
  }
}

配置解释

  • "X-User-Id-From-Request":这是你想要添加到响应中的新响应头名称
  • "$http_x_user_id":这是 response-rewrite 插件支持的 NGINX 变量,用于读取原始的请求头。http_ 是 NGINX 变量中表示请求头的前缀,请求头名称中的 -(连字符)需要转换为 _(下划线)并转为小写。

response-rewrite 插件的其他功能

除了设置响应头,该插件还支持:

  • 添加 (add) 和移除 (remove) 响应头:操作顺序为 addremoveset
  • 修改状态码:通过 status_code 字段修改返回的 HTTP 状态码。
  • 重写响应体:通过 body 字段完全替换响应体,或通过 filters 字段使用正则表达式部分替换。
  • 条件执行:通过 vars 字段配置执行条件,例如仅在响应状态码为 200 时生效。

备选方案简述

  • echo 插件:虽然也可以通过 headers 字段添加响应头,但官方文档明确警告它主要用于示例和学习,不应在生产环境中使用
  • 自定义插件:如果需要非常复杂的逻辑,可以开发一个自定义插件。但 response-rewrite 是官方提供的、功能全面且生产可用的标准解决方案,足以满足绝大多数需求。

总结

response-rewrite 插件是实现你需求的标准、强大且生产可用的方法。通过使用 headers.set 字段并正确引用以 $http_ 开头的 NGINX 变量,可以轻松将请求头的值写入到响应头中。

posted @ 2026-08-04 13:32  张占岭  阅读(2)  评论(0)    收藏  举报