我在马拉松比赛中运行了两个应用程序
我希望web.myblog.com
路由到App 1,web.myblog.com/app
路由到app2。
使用以下配置,所有流量都将转到app 1。
App 1
traefik.frontend.rule=HostRegexp:{subdomain:[a-z]+}.myblog.com
App 2
traefik.frontend.rule=Host:web.myblog.com;PathPrefix:/app
我尝试使用否定匹配来排除app 1的app / app路由,但我的理解是golang并不完全支持负向前瞻,结果也不在traefik中。
我也试过像这样为app 1指定一个路径前缀
traefik.frontend.rule=Host:web.myblog.com;PathPrefix:/
但这没有效果。
当我修改App 1的规则以指向Host:test.myblog.com
时,所有流量都正确地转到app 2,从中我得出结论,到App 2的路由配置是正确的,它被忽略,因为App 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
答案 0 :(得分:0)
如果多个规则匹配traefic将使用规则的长度来确定哪个规则最具体而不是实际特异性。您可以使用
覆盖此人工优先级 traefik.frontend.priority=1000
答案 1 :(得分:0)
如果我将app 1的规则调整为
traefik.frontend.rule=Host:web.myblog.com;PathPrefix:/
每次尝试,并坚持
traefik.frontend.rule=Host:web.myblog.com;PathPrefix:/app
在应用2上,路由行为似乎符合预期:使用web.myblog.com
主机和/app
路径的请求专门且确定地转到应用2(因为Traefik采用最长路径匹配)。如果我修改请求以使用根路径/
(或/app
以外的任何路径,因为它们都将保留匹配的根路径前缀),则流量将转发到应用1.
我对Marathon 1.3.10进行了测试。