为 Traefik 定义主机和路径前端规则

Posted

技术标签:

【中文标题】为 Traefik 定义主机和路径前端规则【英文标题】:Define host and path frontend rule for Traefik 【发布时间】:2017-10-29 03:56:53 【问题描述】:

我正在尝试使用 Traefik 在我的 Docker Swarm 模式集群中部署代理多个应用程序。

我已经得到它,以便它代理命名主机,但我希望它代理命名主机和路径,但我无法计算出我需要使用的标签。

这是我正在使用的docker service 命令:

 docker service create \
                       \
    --label "traefik.port=9000" \
    --label "traefik.docker.network=traefik-net" \
    --label "traefik.frontend.rule=Host:`hostname -f`" \
    --label="traefik.backend=portainer" \
                                        \
    --constraint "node.role == manager" \
    -p 9000:9000 \
    --mount "type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock" \
    --name portainer \
    portainer/portainer

如果主机是dummy.localhost,那么我可以访问http://dummy.localhost 上的搬运工应用程序。但是我想修改它,以便我必须使用http://dummy.localhost/portainer

我已经看到在为 Traefik 使用 toml 文件时有一些方法可以做到这一点,但我在我部署的 docker 服务上使用监视模式和标签。

如何在我的标签中组合多个前端规则,以便可以在主机名和路径上代理此(和任何其他)应用程序?

【问题讨论】:

【参考方案1】:

Traefik v1

如果您希望应用多个规则以使路由决策生效,请用分号分隔它们。例如:

Host: <your host rule>; PathPrefixStrip: /portainer

上面的意思是:如果主机和路径前缀匹配,Traefik 会将请求路由到关联的后端(并在转发之前剥离指定的路径前缀)。这甚至在标签内定义时也有效。

详情请见the frontend documentation。

更新:Traefik v2

Host(`domain.com`) && Path(`/path`)

见the docs

【讨论】:

完美,非常感谢。我使用的是 ',' 而不是 ';'设置多个规则

以上是关于为 Traefik 定义主机和路径前端规则的主要内容,如果未能解决你的问题,请参考以下文章

使用路径前缀规则时如何用 Traefik 重写路径?

Traefik,多个前端规则到一个 docker 容器

traefik - 同一主机的多个端口绑定 V2

traefik Ingress https配置

traefik Ingress https配置

仅使用Traefik在内部网络上公开Docker数据库服务