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

使用Traefik实现路径重写:URL路由至后端服务示例请求

Traefik File Provider 实现路径路由转发示例

嘿,刚好之前处理过类似的路由转发需求,用Traefik的file配置就能完美解决你的场景——把monitor.app.com下的各个子路径请求,转发到对应后端服务的/monitor路径上。下面直接给你完整的配置示例和关键部分的解释:

核心配置(Toml格式)

这是基于Traefik v2+的file provider配置,直接放到你的Traefik配置文件(比如traefik.toml)或者单独的file配置目录下即可:

[http]
  # 定义路由规则:匹配主机和对应路径前缀
  [http.routers]
    [http.routers.service-one-router]
      rule = "Host(`monitor.app.com`) && PathPrefix(`/service-one`)"
      entryPoints = ["web"] # 假设你已定义名为web的入口(比如80端口)
      middlewares = ["service-one-rewrite-chain"]
      service = "service-one"

    [http.routers.service-two-router]
      rule = "Host(`monitor.app.com`) && PathPrefix(`/service-two`)"
      entryPoints = ["web"]
      middlewares = ["service-two-rewrite-chain"]
      service = "service-two"

    [http.routers.service-three-router]
      rule = "Host(`monitor.app.com`) && PathPrefix(`/service-three`)"
      entryPoints = ["web"]
      middlewares = ["service-three-rewrite-chain"]
      service = "service-three"

    [http.routers.service-four-router]
      rule = "Host(`monitor.app.com`) && PathPrefix(`/service-four`)"
      entryPoints = ["web"]
      middlewares = ["service-four-rewrite-chain"]
      service = "service-four"

  # 定义路径重写的中间件链:同时处理带子路径和根路径的请求
  [http.middlewares]
    [http.middlewares.service-one-rewrite-chain.chain]
      middlewares = ["service-one-rewrite-regex", "service-one-rewrite-root"]
    [http.middlewares.service-one-rewrite-regex.replacePathRegex]
      regex = "^/service-one/(.*)"
      replacement = "/monitor/$1"
    [http.middlewares.service-one-rewrite-root.replacePath]
      path = "/monitor"

    [http.middlewares.service-two-rewrite-chain.chain]
      middlewares = ["service-two-rewrite-regex", "service-two-rewrite-root"]
    [http.middlewares.service-two-rewrite-regex.replacePathRegex]
      regex = "^/service-two/(.*)"
      replacement = "/monitor/$1"
    [http.middlewares.service-two-rewrite-root.replacePath]
      path = "/monitor"

    [http.middlewares.service-three-rewrite-chain.chain]
      middlewares = ["service-three-rewrite-regex", "service-three-rewrite-root"]
    [http.middlewares.service-three-rewrite-regex.replacePathRegex]
      regex = "^/service-three/(.*)"
      replacement = "/monitor/$1"
    [http.middlewares.service-three-rewrite-root.replacePath]
      path = "/monitor"

    [http.middlewares.service-four-rewrite-chain.chain]
      middlewares = ["service-four-rewrite-regex", "service-four-rewrite-root"]
    [http.middlewares.service-four-rewrite-regex.replacePathRegex]
      regex = "^/service-four/(.*)"
      replacement = "/monitor/$1"
    [http.middlewares.service-four-rewrite-root.replacePath]
      path = "/monitor"

  # 定义后端服务:指向实际的服务地址
  [http.services]
    [http.services.service-one.loadBalancer]
      [[http.services.service-one.loadBalancer.servers]]
        url = "http://service-one/"

    [http.services.service-two.loadBalancer]
      [[http.services.service-two.loadBalancer.servers]]
        url = "http://service-two/"

    [http.services.service-three.loadBalancer]
      [[http.services.service-three.loadBalancer.servers]]
        url = "http://service-three/"

    [http.services.service-four.loadBalancer]
      [[http.services.service-four.loadBalancer.servers]]
        url = "http://service-four/"

关键部分解释

  • 路由规则:每个router通过Host()匹配域名,PathPrefix()匹配子路径,确保只有符合条件的请求才会进入对应的转发流程。
  • 中间件链:用chain把两个重写中间件组合起来,既能处理带子路径的请求(比如/service-one/api/metrics → /monitor/api/metrics),也能处理直接访问子路径根的请求(比如/service-one → /monitor)。
  • 后端服务:每个service配置了对应的后端服务地址,Traefik会把重写后的请求转发到这里。

如果你的Traefik版本是v1,配置语法会略有不同,但核心思路一致——匹配路径、重写路径、转发到后端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:04:37