配置重写策略

更新时间: 2023-09-07 15:31:34

在请求转发给目标后端服务之前,重写可以修改原始请求的路径(Path)和主机域(Host),本文介绍如何配置重写策略。

背景信息

通常情况下,重写主要用于修改原始请求的路径(Path)和主机域(Host)。

路径(Path)重写

对于路径(Path)重写,云原生网关支持3种重写模式:精确重写、前缀重写和正则重写。

  • 精确重写:精确重写可以完全修改原始请求的Path。

    例如,原始请求的Path为/app/test,但转发给后端服务的Path为/foo/bar,建议配置方式如下:

    • 路由匹配条件:匹配方式为精确匹配,Path为/app/test

    • 重写:重写方式为精确重写,Path为/foo/bar

    重要

    精确重写要求路由的匹配方式为精确匹配或正则匹配,前缀匹配不支持精确重写。

  • 前缀重写:前缀重写可以修改原始请求的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)重写,云原生网关支持精确重写。例如,原始请求的Host为test.com,但转发给后端服务的Host为dev.com,在重写策略中将重写主机设置为dev.com。

精确重写和前缀重写

  1. 登录MSE网关管理控制台

  2. 在左侧导航栏,选择云原生网关 > 网关列表,并在顶部菜单栏选择地域。

  3. 网关列表页面,单击目标网关名称。

  4. 在左侧导航栏,单击路由管理 > 路由配置,在需要变更的路由规则操作列下方,单击策略配置

  5. 策略配置区域,单击重写页签,单击重写策略右侧的编辑图案

  6. 重写对话框中配置路由规则,然后单击确定

    修改重写规则

    精准重写和前缀重写参数说明如下:

    参数

    描述

    原路径

    显示当前路由的匹配方式和匹配Path。其中匹配方式包括精确匹配、前缀匹配和正则匹配。

    重写路径

    您可以选择重写路径的匹配方式和匹配Path。

    • 若原路径的匹配方式为精确匹配或正则匹配时,重写路径匹配方式可以选择精确重写。

    • 若原路径的匹配方式为前缀匹配时,重写路径匹配方式可以选择前缀重写或正则重写。

    • 若原路径的匹配方式为正则匹配时,重写路径匹配方式可以选择精确重写和正则重写。

    原主机域

    显示当前路由所属的主机域。

    重写主机

    输入重写后的主机域。

  7. 重写规则配置完成后,打开开启状态右侧的开关。

    • 开启:网关转发请求到后端时,会按照您配置的重写策略对原请求的路径(Path)和主机域(Host)进行修改。

    • 关闭:网关转发请求到后端时,不会对原请求的路径(Path)和主机域(Host)进行修改。

正则重写

  1. 登录MSE网关管理控制台

  2. 在左侧导航栏,选择云原生网关 > 网关列表,并在顶部菜单栏选择地域。

  3. 网关列表页面,单击目标网关名称。

  4. 在左侧导航栏,单击路由管理 > 路由配置,在需要变更的路由规则操作列下方,单击策略配置

  5. 策略配置区域单击重写页签,单击重写策略右侧的编辑图案

  6. 重写对话框中配置路由规则,然后单击确定

    正则重写

    正则重写参数说明如下:

    参数

    描述

    原路径

    显示当前路由的匹配方式和匹配Path。其中匹配方式包括精确匹配、前缀匹配和正则匹配。

    重写路径

    选择正则重写,输入模式和替换内容,关于正则表达式的规范,请参见正则表达式语法

    • 模式:用于匹配路径(Path)上需要修改的内容。

    • 替换:用于替换匹配路径(Path)的内容。

    原主机域

    显示当前路由所属的主机域。

    重写主机

    输入重写后的主机域。

  7. 重写规则配置完成后,打开开启状态右侧的开关。

    • 开启:网关转发请求到后端时,会按照您配置的重写策略对原请求的路径(Path)和主机域(Host)进行修改。

    • 关闭:网关转发请求到后端时,不会对原请求的路径(Path)和主机域(Host)进行修改。

结果验证

假设业务对外暴露需要使用同一前缀app1进行区分,实际后端地址没有此前缀。您可以选择前缀重写Path,将前缀/app1/重写为/,这样可以保证请求正确转发。

  • 测试请求地址:

    curl -I http://121.196.XX.XX/demo/item/list
  • 重写后的测试请求地址(转发到后端Path仍为/demo/item/list):

    curl -I http://121.196.XX.XX/app1/demo/item/list

相关文档

重定向路由

阿里云首页 微服务引擎 MSE 相关技术圈