我正在尝试使用docker标签创建一条前端规则,该规则既可以将一对基于主机的路由,也可以将某些基于路径的路由从一个域定向到一个后端,但是我很难找到正确的魔术来解决复杂的问题规则。
frontend.rule="Host:HostA.domain,HostB.domain,HostC.domain,Host:svc.domain;PathPrefix=/api/users, Host:svc.domain;PathPrefix=/api/other"
这似乎是or和And逻辑的正确组合,但我似乎错了。

最佳答案

  • ,是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
  • 关于docker - traefik docker标签中基于主机和路径的路由规则的混合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52338446/

    10-16 05:38