我正在尝试使用 docker 标签创建一个前端规则,该标签将几个基于主机的路由和一些基于路径的路由从一个域定向到一个后端,但我在为结果变得复杂的规则获得正确的魔力时遇到了麻烦。
frontend.rule="Host:HostA.domain,HostB.domain,HostC.domain,Host:svc.domain;PathPrefix=/api/users, Host:svc.domain;PathPrefix=/api/other"
这似乎是或和逻辑的正确组合,但我似乎错了。
,
是 OR 运算符(仅在匹配器中工作,例如:Host:foo.com,bar.com
(;
是 AND 运算符(仅适用于匹配器之间,例如:Host:foo.com;Path:/bar
(
Host:api.service;PathPrefixStrip:/foo
要在匹配器之间具有 OR,您需要使用区段标签:
# ...
labels:
- "traefik.enable=true"
- "traefik.port=80"
- "traefik.foo.frontend.rule=Host:api.mydomain.com"
- "traefik.bar.frontend.rule=Host:www.mydomain.com,m.mydomain.com;PathPrefixStrp:/_"
# ...
文档链接:
- https://docs.traefik.io/v1.6/basics/#matchers
- https://docs.traefik.io/v1.6/basics/#combining-multiple-rules
- https://docs.traefik.io/v1.6/configuration/backends/docker/#on-containers-with-multiple-ports-segment-labels