网关路由转发

网关路由转发提供两种使用场景:一是用于跨域访问,二是用于服务转调

app.m 参数介绍

网关路由转发通过定义 app.m 实现,app.m 中的参数说明如下,详情参考《接口注册程序

name:服务或路由的唯一标识符(建议名称同所在目录名)
  示例:如果创建了一个名为 my-service 的服务,那么在配置路由或其他相关设置时,
  可以通过这个名字来引用它。

request_path:Http 请求的 URL 路径部分,不包括查询字符串
  示例:如果有一个请求路径为 /users/123,那么 request_path 就是 /users/123

preserve_host:布尔值参数,用于控制是否保留原始请求头中的 Host 字段
  示例:如果 preserve_host 设置为 true,且原始请求头的 Host 为 example.com,
  那么即使路由配置的 upstream_url 是 http://backend.example.com,
  传递到上游服务的 Host 字段仍然是 example.com。

strip_request_path:布尔值参数,用于控制是否从请求路径中去除与路由匹配的部分
  示例:如果路由配置的路径为 /api,而请求路径为 /api/users/123,
  并且 strip_request_path 设置为 true,那么转发到上游服务的路径将是 /users/123

upstream_url:指定上游服务的 URL,Kong 会将匹配到的请求转发到这个 URL
  示例:如果 upstream_url 设置为 http://backend.example.com,
  那么所有匹配到此服务的请求都会被转发到 http://backend.example.com

新建服务目录

在 model/service 目录下,有两种方法创建服务目录

新建服务模块

在架构中添加服务模块,就会在 model/service 目录下创建目录,创建后必须删除“服务模块.meta”,因为此文件中包括 health-check 会导致执行健康检查,导致请求返回425

新建文件夹

在代码页中,在 model/service 目录下新建文件夹,注意此目录下必须包括 deploy.m 文件和 deploy 目录,deploy 目录包括 dev.def.xml 和 production.def.xml 两个文件,文件内容参考 health-check 目录下的文件

新建 app.m

一个 app.m 注册一个路由,实现一个网关路由转发。在应用中如果需要设置多个转发,就需要定义多个 app.m。每个 app.m 需要在同名目录下,就需要建多个目录。本例实现两个转发,在 model/service 目录下新建 redirect 目录,在 redirect 目录下新建两个路由目录 baidu 和 product,在这两个目录下分别新建两个 app.m 文件,目录结构如下图所示

1741760263457

服务转调

product 目录下的 app.m 实现服务转调,将 /product 转调到 /main/fuwu/queryproduct。app.m 设置如下图所示

1741760431605

  • name:路由名称
  • request_path:请求路径(必填)
  • preserve_host:false
  • strip_request_path:true
  • upstream_url:转发的请求地址(必填)

运行效果,如下图所示

1741760823399

跨域访问

某些第三方请求不支持跨域访问,导致前端直接调用会出现跨域安全报错,此时可以通过网关 Kong 转调的方式解决前端不能调用的问题。实现第三方系统地址本地域名访问,如下图所示

1741761173781

baidu 目录下的 app.m 实现跨域访问,将 /baidu 转调到 https://www.baidu.com。app.m 设置如下图所示

1741760946891

  • name:路由名称
  • request_path:请求路径(必填)
  • preserve_host:false
  • strip_request_path:true
  • upstream_url:转发的请求地址(必填)

运行效果,如上图所示

特别说明

  • 在页面的 JS 代码中,可以调用 this.getServiceUrl("/baidu"),获取完整路径,包括前面的门户域名和应用名

案例位置

桌面-页面-服务-网关路由转发.w

results matching ""

    No results matching ""