【发布时间】:2018-03-31 23:57:12
【问题描述】:
我在马拉松上运行了两个应用程序。
我希望 web.myblog.com 路由到 App 1,web.myblog.com/app 路由到 app2。
使用以下配置,所有流量都将流向应用 1。
App 1
traefik.frontend.rule=HostRegexp:{subdomain:[a-z]+}.myblog.com
App 2
traefik.frontend.rule=Host:web.myblog.com;PathPrefix:/app
我尝试使用负匹配来排除应用程序 1 的 /app 路由,但据我了解,golang 不完全支持负前瞻,因此在 traefik 中也不完全支持。
我也尝试像这样为应用程序 1 指定路径前缀
traefik.frontend.rule=Host:web.myblog.com;PathPrefix:/ 但这没有效果。
当我修改应用程序 1 的规则以指向 Host:test.myblog.com 时,所有流量都正确地流向应用程序 2,由此我得出结论,应用程序 2 的路由配置是正确的,它只是被忽略了,因为应用程序 1 取代了它,因为它也满足路线。
这个问题正在讨论这个确切的用例:
https://github.com/containous/traefik/issues/419#issuecomment-223843103
但是看起来没有pathPrefix的配置优先于带有pathPrefix的配置,也许马拉松后端根本不支持这种类型的配置?
从这个文档中我不清楚:
https://github.com/fclaeys/traefik/blob/master/docs/basics.md。
寻找可以帮助我了解马拉松后端是否完全支持此用例的答案,或者它的示例工作配置。
使用 Traefik v1.5.1
【问题讨论】:
-
令我惊讶的是,“traefik.frontend.rule=Host:web.myblog.com;PathPrefix:/”对你不起作用。正如您在自己的答案中所写,Traefik 进行最长路径匹配。因此,任何带有
/app前缀的请求都应该到达应用程序 2,而任何缺少该前缀的请求都应该到达应用程序 1。如果这不起作用,则可能存在错误(或者我记错了行为)。跨度> -
我刚刚编辑了您的帖子,因为它在最初的段落中使用了
app主机,但后来使用了myblog。希望我的修复是正确的,如果不告诉我。 -
这是规则的实际句法长度。规则 1 对规则的一部分使用了正则表达式,因此总体上更长。
-
我指的是您在段落中提到的更新规则,开头是“我还尝试为应用程序 1 指定路径前缀 [...]”。这样一来,应用 1 和应用 2 的规则之间的差异似乎可以归结为路径值。