【问题标题】:Traefik rule need solution for sub domainTraefik 规则需要子域的解决方案
【发布时间】:2019-11-21 16:23:12
【问题描述】:
我想在 traefik 后面运行一个应用程序,而不是作为子域,而是像:xyz.abc.com/m1 或 xyz.abc.com/m2 等等。
哪个标签适合它。我尝试过使用 PathPrefix,但它不起作用。一个示例应用程序 Joomla 部署在 docker swarm mode 上。我可以使用 Nginx 或 Haproxy 吗?如果是这样,如何?
【问题讨论】:
标签:
docker
nginx
load-balancing
haproxy
traefik
【解决方案1】:
当将多个应用程序放在同一个名称后面时,应用程序很有可能需要知道它的 URL 前缀不在根目录(因为大多数应用程序都希望部署在根目录)。所以,可能也需要看看。
在 Traefik 方面,堆栈文件可能如下所示。这是在 Swarm 模式下运行的(因为你提到了 Swarm),这需要 Traefik 标签在服务上,而不是在容器上。因此,它们必须在 deploy.labels 定义内,而不仅仅是 labels。
使用 Traefik 1 的示例
version: "3.7"
services:
proxy:
image: traefik:1.7
command: --docker --docker.swarmMode
ports:
- 80:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock
app1:
image: your-image-for-app1
deploy:
labels:
traefik.backend: app1
traefik.frontend.rule: PathPrefix:/m1
traefik.port: 80
app2:
image: your-image-for-app2
deploy:
labels:
traefik.backend: app2
traefik.frontend.rule: PathPrefix:/m2
traefik.port: 80
使用 Traefik 2 的示例
version: "3.7"
services:
proxy:
image: traefik:2.0
command: --providers.docker --providers.docker.swarmMode
ports:
- 80:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock
app1:
image: your-image-for-app1
deploy:
labels:
traefik.http.routers.app1.rule: PathPrefix(`/m1`)
traefik.http.services.app1.loadbalancer.server.port: 80
app2:
image: your-image-for-app2
deploy:
labels:
traefik.http.routers.app2.rule: PathPrefix(`/m2`)
traefik.http.services.app2.loadbalancer.server.port: 80