通过配置重写策略,您可以在将请求转发给目标后端服务之前修改请求的路径和主机域,以满足特定的业务环境和架构要求。重写策略能够精确地控制请求的路径和主机域,并确保将请求正确地路由到适当的服务或端点。
重写策略
重写主要用于修改原始请求的路径(Path)和主机域(Host)。
登录云原生API网关控制台。
在左侧导航栏,选择API管理,并在顶部菜单栏选择地域。
单击目标API,在API详情页面,单击目标路由名称。选择策略配置页签,然后单击重写。进行相关配置并单击保存。
路径(Path)重写
对于路径(Path)重写,云原生API网关支持三种重写模式:精确重写、前缀重写和正则重写。
前缀重写
前缀重写可以修改原始请求的Path前缀。
示例一
原始请求的Path为/app/test
,但转发给后端服务的Path为/test
,配置方式建议如下:
路由匹配条件:匹配方式为前缀匹配,Path为
/app/
。重写:重写方式为前缀重写,Path为
/
。
路由匹配条件的Path必须设置为/app/
,因为前缀重写只会修改前缀匹配字符串。如果路由匹配条件的Path设置为/app
,那么经重写后的Path结果将会是//test
,不符合预期。
示例二
原始请求的Path为/v1/test
,但转发给后端服务的Path为/v2/test
。配置方式建议如下:
路由匹配条件:匹配方式为前缀匹配,Path为
/v1
。重写:重写方式为前缀重写,Path为
/v2
。
前缀重写要求路由的匹配方式为前缀匹配,精确匹配和正则匹配不支持前缀重写。由于路由匹配方式为前缀匹配且可以匹配所有带有指定前缀Path的请求,所以您在配置前缀重写时需要关注是否需要对所有这些请求进行重写,否则建议使用精确重写。
正则重写
正则重写可以部分修改原始请求的Path。正则重写包括两个元素,一个是模式匹配串,用于匹配Path上需要修改的部分;另一个是替换串,用于替换匹配成功的Path部分。关于正则表达式的规范,请参见正则表达式语法。
示例一
原始请求的Path为/aaa/one/bbb/one/ccc
,但转发给后端服务的Path为/aaa/two/bbb/two/ccc
,配置方式建议如下:
路由匹配条件:匹配方式为精确匹配,Path为
/aaa/one/bbb/one/ccc
。重写:重写方式为正则重写,模式串为
one
,替换串为two
。
示例二
原始请求的Path为/httpbin/(.*)/(.*)
,希望去掉前缀/httpbin
并且将两个正则表达式部分进行位置交换,配置方式建议如下:
路由匹配条件:匹配方式为正则匹配,Path为
/httpbin/(.*)/(.*)
。重写:重写方式为正则重写,模式串为
/httpbin/(.*)/(.*)
,替换串为/\2/\1
,其中\1
表示第一个正则匹配到的字符串,\2
表示第二个正则匹配到的字符串,对应Nginx中的$1,$2用法。
正则重写属于高阶用法,语法较为复杂且一般用于特殊的场景,建议您选择精确重写。
主机域(Host)重写
对于主机域(Host)重写,云原生API网关支持精确重写。
例如,原始请求的Host为test.com
,但转发给后端服务的Host为dev.com
,在重写策略中将重写主机设置为dev.com
。