2017-09-27 2 views
2

mit der Herstellung Reverse-Proxy auf Docker und Traefik ich mehrere Pfade auf dem gleichen Host in zwei verschiedene Backend-Server wie diese,Traefik (+ Docker) Pfadeinstellungen für root und Unterordner versenden

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

versenden wollen Wenn die Regeln sind nur # 2 und # 3, ich so in docker-compose.yml

tun konnte
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" 

jedoch Hinzufügen der Wurzel ‚/‘ in die erste PathPrefix scheint/Benutzer auf app2 zu verhüllen. Das Folgende funktioniert nicht, und alles geht an App1 Backend.

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

Die Regeln "Host:" und "PathPrefix" scheint, als 'UND' arbeiten, aber ich wollte verwenden 'OR' (genaue/ODER mit/Post starten). Ich suchte und erfuhr, dass mehrere Regeln seit Version 1.3.0 gemäß pull request #1257 geleitet werden können, indem mehrere Zeilen mit dem Hinzufügen von Dienstnamen erstellt werden.

Damit wissen, was ich getan habe ist wie diese,

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" 

Jetzt funktioniert es als erforderlich, die Root-Zugriff auf app1/versandt.

Meine Frage ist, ist das der richtige Weg? Für mich sieht das nicht so aus, da dieser Root- und Unterordner-Versand ein typischer Anwendungsfall sein sollte.

Antwort

1

Sie könnten in Erwägung ziehen, priority Labels hinzuzufügen, damit die app2-Regeln Vorrang vor app1-Regeln haben. Dann sollten Sie in der Lage sein, die App1-Konfiguration zu vereinfachen.

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" 

Update: Ich hatte die Prioritäten in der falschen Reihenfolge. Größere Prioritätswerte haben Vorrang vor kleineren Prioritätswerten. Laut den Dokumenten basiert es auf (priority + rule length), und der größere Wert gewinnt.

Verwandte Themen