You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express-Gateway:如何基于URL模式选择服务端点?

解决方案:动态转发子域名请求到对应内部服务

你的核心需求(把x.mydomain.com请求转发到x.internal.com)完全可以实现,而且能彻底摆脱硬编码大量apiEndpoints和CNAME的维护负担,下面给你具体的实现思路和配置示例:

1. 用通配符匹配所有子域名请求

首先保留你原有的通配符apiEndpoints配置,这样所有子域名的请求都会进入这条规则:

apiEndpoints:
  legacy:
    host: '*.mydomain.com'
    paths: '/v1/*'

2. 在Proxy政策中动态构造目标URL

不用提前定义固定的serviceEndpoints,而是直接在proxy政策里用请求上下文变量动态生成目标地址。主流API网关(比如Express Gateway、Tyk、Kong等)都支持在配置中使用表达式引用请求元数据(比如主机名、路径参数)。

以Express Gateway为例,你可以这样编写pipeline配置:

pipelines:
  default:
    apiEndpoints:
      - legacy
    policies:
      - proxy:
          - action:
              # 通过表达式替换主机名后缀,动态生成目标地址
              target: "{{replace(request.hostname, '.mydomain.com', '.internal.com')}}"

这里的request.hostname会获取当前请求的完整主机名(比如customer1.mydomain.com),replace函数会自动把.mydomain.com替换成.internal.com,最终得到customer1.internal.com作为转发目标。

如果你的网关支持捕获组变量,还能更精准地提取子域名前缀:

apiEndpoints:
  legacy:
    # 用捕获组定义子域名变量
    host: '{subdomain}.mydomain.com'
    paths: '/v1/*'

pipelines:
  default:
    apiEndpoints:
      - legacy
    policies:
      - proxy:
          - action:
              target: "{{subdomain}}.internal.com"

这种方式更直观,直接引用捕获到的subdomain变量拼接目标URL即可。

3. 简化DNS配置:使用Wildcard CNAME

另外,你可以在DNS层面配置一条Wildcard CNAME记录,把*.mydomain.com直接指向你的网关地址。这样新客户的子域名不用单独添加CNAME记录,自动就能被网关接收处理,进一步降低维护成本。

总结

这种动态配置方案完全替代了硬编码大量apiEndpoints的模式,不管新增多少客户子域名,都不需要修改网关配置,只需要确保内部服务x.internal.com能正常访问即可。

内容的提问来源于stack exchange,提问作者unexplored

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:12:29