2017-09-27 139 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),而較大的值勝。