traefik - 将多个路径重定向到外部 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 这样的另一个代理来进行重定向,这会增加很多复杂性,我发现带有标签的配置非常舒适和透明。
有什么想法吗?
解决方案
您可以将规则移动到前端。由于前端似乎需要定义后端,即使它永远不会被调用,也只需定义它。
[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