使用重写插件改写请求或响应

最近更新时间:2022-12-23 10:23:19

我的收藏

操作场景

本文介绍如何在 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 OK
Addheader: test
Connection: keep-alive
Content-Length: 20
Content-Type: application/octet-stream
Date: Thu, 22 Dec 2022 06:31:11 GMT
Server: nginx/1.20.1
Via: kong/2.5.1
X-Kong-Proxy-Latency: 30
X-Kong-Upstream-Latency: 66

this 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 OK
Connection: keep-alive
Content-Type: application/json
Date: Thu, 22 Dec 2022 06:53:43 GMT
Server: nginx/1.20.1
Via: kong/2.5.1
X-Kong-Proxy-Latency: 22
X-Kong-Upstream-Latency: 63
Content-Length: 54

{"myreturn":"this is test service","addbody":"return"}