通过在 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 上的 /user。以下不起作用,一切都转到 app1 后端。
- "traefik.frontend.rule=Host:traefik.test;PathPrefix:/,/post,/group"
规则“主机:”和“路径前缀”似乎用作“与”,但我想使用“或”(精确 /,或以 /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/ 。
我的问题是,这是正确的方法吗?对我来说看起来不是这样,因为这个根和子文件夹调度应该是一个典型的用例。