首页 > 解决方案 > 将多个路径重定向到外部 URL

问题描述

我在使用 traefik 将多条路径重定向到多个目的地时遇到问题。

由于软件遗留原因,我必须将我的应用程序后面的一些路径重定向到外部 url。我的应用程序在牧场主中运行,我正在使用牧场主标签来配置 traefik:

traefik.enable: 'true'
traefik.app.backend: app
traefik.app.frontend.redirect.entryPoint: https
traefik.app.frontend.rule: 'Host: app.url'
traefik.app.protocol: http
traefik.app.port: '8080'
traefik.support.backend: support
traefik.support.protocol: https
traefik.support.frontend.redirect.regex: ^https?://app.url/support/(.*)
traefik.support.frontend.redirect.replacement: https://other.support.url    
traefik.support.port: '8080'

但是https://app.url/support不会重定向到https://other.support.url并且我收到 404 错误。

如果我只有要重定向的 URL,我会在 https 入口点的入口点级别添加重定向。但就像我建议入口点不支持多个重定向一样。

[entryPoints.https]
 address = ":443"
 [entryPoints.https.redirect]
  regex = "^https://app.url/support"
  replacement = "https://other.support.url"

我如何使用最新的 traefik 1.6.4 和 Rancher 1.6.x 来实现这一点。还是有可能?

我不想只使用像 nginx 这样的另一个代理来进行重定向,这会增加很多复杂性,我发现带有标签的配置非常舒适和透明。

有什么想法吗?

标签: traefikrancher

解决方案


您可以将规则移动到前端。由于前端似乎需要定义后端,即使它永远不会被调用,也只需定义它。

[backends]
  [backends.fake]
    [backends.fake.servers.s1]
      url="http://1.2.3.4"

[frontends]
[frontends.r1]
  backend = "fake"
  [frontends.r1.redirect]
    regex = "^http://foo.bar/(.*)"
    replacement = "http://mydomain1/$1"
    permanent = false
[frontends.r2]
  backend = "fake"
  [frontends.r2.redirect]
    regex = "^http://bar.blech/(.*)"
    replacement = "http://mydomain2/$1"
    permanent = false

推荐阅读