Traefik(+ Docker)路径设置用于根和子文件夹调度

时间:2017-09-27 05:58:35

标签: docker reverse-proxy traefik pathinfo

通过在Docker和Traefik上进行反向代理,我想在同一主机上将多个路径分配到两个不同的后端服务器,

1. traefik.test/            ->   app1/
2. traefik.test/post/blabla ->   app1/post/blabla
3. traefik.test/user/blabla ->   app2/user/blabla

如果规则只有#2和#3,我可以在docker-compose.yml中这样做

app1:
  image: akky/app1
  labels:
    - "traefik.backend=app1"
    - "traefik.frontend.rule=Host:traefik.test;PathPrefix:/post,/comment"

app2:
  image: akky/app2
  labels:
    - "traefik.backend=app2"
    - "traefik.frontend.rule=Host:traefik.test;PathPrefix:/user,/group"

但是,在第一个PathPrefix中添加根“/”似乎是在app2上隐藏/用户。以下不起作用,一切都进入app1后端。

    - "traefik.frontend.rule=Host:traefik.test;PathPrefix:/,/post,/group"

规则“Host:”和“PathPrefix”看起来像'AND',但我想使用'OR'(精确/,OR以/ post开头)。我搜索并了解到,自版本1.3.0以来可以引导多个规则,根据pull request #1257,通过添加多行来添加服务名称。

通过了解,我所做的就是这样,

app1:
  image: akky/app1
  labels:
    - "traefik.app1_subfolder.backend=app1"
    - "traefik.app1_subfolder.frontend.rule=Host:traefik.test;PathPrefix:/post,/group"
    - "traefik.app1_rootfolder.backend=app1"
    - "traefik.app1_rootfolder.frontend.rule=Host:traefik.test;Path:/"

app2:
  image: akky/app2
  labels:
    - "traefik.backend=app2"
    - "traefik.frontend.rule=Host:traefik.test;PathPrefix:/user"

现在它可以根据需要工作,root访问权限被分派到app1 /。

我的问题是,这是正确的方法吗?对我来说这看起来不是这样,因为这个root和子文件夹调度应该是一个典型的用例。

1 个答案:

答案 0 :(得分:1)

您可以考虑添加priority标签,以便app2规则优先于app1规则。然后你应该能够简化app1配置。

app1:
  image: akky/app1
  labels:
    - "traefik.backend=app1"
    - "traefik.frontend.priority=10"
    - "traefik.frontend.rule=Host:traefik.test;PathPrefix:/,/post,/group"

app2:
  image: akky/app2
  labels:
    - "traefik.backend=app2"
    - "traefik.frontend.priority=50"
    - "traefik.frontend.rule=Host:traefik.test;PathPrefix:/user"

更新:我的错误顺序是优先顺序。较大的优先级值优先于较小的优先级值。根据文档,它基于(priority + rule length),较大的值获胜。