docker - Traefik(+Docker) 根目录和子文件夹分派(dispatch)的路径设置

标签 docker reverse-proxy traefik pathinfo

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

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 访问权限被分派(dispatch)到 app1/。

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

最佳答案

您可以考虑添加 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) , 较大的值获胜。

关于docker - Traefik(+Docker) 根目录和子文件夹分派(dispatch)的路径设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46440463/

相关文章:

node.js - Mean Stack 安装在端口 80 或 iis 下

kubernetes - Traefik Helm Chart 404

docker - 在非HTTP端口上将Traefik与TLS(acme插件)一起使用以进行HTTP通信

docker - 如何使用 k3d 通过唯一端口公开两个应用程序/服务?

networking - 向 docker 容器授予对 eth1 的完全访问权限

docker - 尽管没有错误输出,jenkins 仍无法正确启动

docker - 如何公开仅绑定(bind)到 127.0.0.1 的服务?

docker - 如何在设置正确用户的同时将 VSCode 附加到远程 Docker 容器

docker - Nginx - Heroku Docker - 是否可以在 Heroku 上将 Nginx 作为反向代理运行

node.js - 在 DigitalOcean 上托管多个 meteor 应用程序