操作场景
本文介绍如何在 Kong 云原生网关上通过 Kong 插件实现下述常见请求/响应改写场景:
支持在请求阶段对 header/query/body 进行改写
支持在响应阶段对 header/body 进行改写
前置条件
已购买 Kong 网关实例,详情请参见 实例管理。
配置了后端(Service)以及路由(Route)。
插件说明
插件名称:TSE PROXY REWRITE
插件分类:Transformations
概述:实现对客户端的请求和响应进行改写,支持使用Nginx内置变量。
具体能力:
支持在请求或响应阶段对 query/header 参数进行新增、编辑、删除。
当 content-type 为 application/json, multipart/form-data, application/x-www-form-urlencoded 时,支持在请求或响应阶段对 body 字段进行新增、编辑、删除。
支持使用nginx变量重写请求/响应。
插件配置
配置项 | 是否必填 | 配置说明 |
Header 参数 | 否 | 支持配置多条,每条配置项包括生效阶段、操作类型、键、值。 生效阶段:支持请求、响应。 操作类型:支持新增、删除、编辑。 键值:输入请求/响应的 Header 参数名和值。 支持以 $var 的格式包含 NGINX 变量,例如 $remote_addr $balancer_ip。 |
Query 参数 | 否 | 支持配置多条,每条配置项包括生效阶段、操作类型、键、值。 生效阶段:支持请求。 操作类型:支持新增、删除、编辑。 键值:输入请求的 Query 参数名和值。 支持以 $var 的格式包含 NGINX 变量,例如 $remote_addr $balancer_ip。 |
Body | 否 | 支持配置多条,每条配置项填写生效阶段、操作类型、键、值。 生效阶段:支持请求、响应。 操作类型:支持新增、删除、编辑。 键值:当 content-type 为 application/json, multipart/form-data, application/x-www-form-urlencoded 时,输入 body 字段的参数名和值。 |
注意
当操作类型为编辑时,如果指定的参数不存在,则会按照新增操作新增键和值;如果指定的参数已存在,则会进行值替换。
操作步骤
场景一:实现响应阶段增加 Header 参数
1. 登录 Konga 管理控制台,进入需要配置响应改写的 Service 详情页,单击 Add Plugin 添加插件,在 Transformations 分组下选择 TSE PROXY REWRITE 插件。
2. 在插件中填写以下配置,实现响应阶段新增一个 Header 参数。
3. 发起 API 请求,查看后端服务的响应是否新增添加的 Header 参数。
HTTP/1.1 200 OKAddheader: testConnection: keep-aliveContent-Length: 20Content-Type: application/octet-streamDate: Thu, 22 Dec 2022 06:31:11 GMTServer: nginx/1.20.1Via: kong/2.5.1X-Kong-Proxy-Latency: 30X-Kong-Upstream-Latency: 66this is test service
场景二:实现请求阶段改写 Query 参数
1. 登录 Konga 管理控制台,进入需要配置请求改写的 Service 详情页,单击 Add Plugin 添加插件,在 Transformations 分组下选择 TSE PROXY REWRITE 插件。
2. 在插件中填写以下配置,实现响应阶段改写 Query 参数。
3. 发起 API 请求,查看后端服务是否收到改写的 Query 参数。
场景三:实现响应阶段增加 Body
1. 登录 Konga 管理控制台,进入需要配置请求改写的 Service 详情页,单击 Add Plugin 添加插件,在 Transformations 分组下选择 TSE PROXY REWRITE 插件。
2. 在插件中填写以下配置,实现响应阶段增加 Body 参数。
注意
对 body 参数的操作,需要请求传入 Content-Type 的 Header。仅当 Content-Type 为 application/json, multipart/form-data, application/x-www-form-urlencoded 时,才会进行 body 字段的改写。
3. 发起 API 请求,查看后端服务的响应是否收到新增的 Body 参数。
HTTP/1.1 200 OKConnection: keep-aliveContent-Type: application/jsonDate: Thu, 22 Dec 2022 06:53:43 GMTServer: nginx/1.20.1Via: kong/2.5.1X-Kong-Proxy-Latency: 22X-Kong-Upstream-Latency: 63Content-Length: 54{"myreturn":"this is test service","addbody":"return"}