2017-09-27 136 views
2

随着泊坞窗和Traefik做反向代理,我要派遣同一主机上的多条路径到像这两个不同的后端服务器,Traefik(+泊坞窗)的根路径设置和子文件夹派遣

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

如果规则是唯一#2,#3,我可以在泊坞窗,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似乎掩饰对APP 2 /用户。以下不起作用,并且所有内容都转到app1后端。

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

规则 “主持人:” 和 “PathPrefix”,似乎工作作为 'AND',但我想用 'OR'(确切的/,或者用/后开始)。我搜索了一下,并且知道可以从版本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" 

现在,它的工作原理是必需的,完整的权限被分派到APP1 /。

我的问题是,这是正确的方式?它看起来不像我,因为这个根和子文件夹派遣应该是一个典型的用例。

回答

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),而较大的值胜。