Traefik 中 Path 和 PathPrefix 匹配的问题
Issues with Path and PathPrefix matching in Traefik
使用 docker 容器中的 Traefix 版本 1.2.3 我设置了以下文件。
traefik:
image: traefik
command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG
ports:
- "80:80"
- "8080:8080"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /dev/null:/traefik.toml
services:
image: opencoredata/ocdservices:0.2
labels:
- "traefik.backend=services"
- "traefik.frontend.rule=Host:opencore.dev"
- "traefik.frontend.rule=PathPrefix:/api"
# web:
# image: opencoredata/ocdweb:0.3
# labels:
# - "traefik.backend=web"
# - "traefik.frontend.rule=Host:opencore.dev"
如果我删除围绕 "web" 部分的评论,所有流量都将转到该容器,而忽略 Path 或 PathPrefix 或任何其他试图获取以 /api/ 开头的 URL 的尝试服务容器。
像上面一样注释掉 "web" 容器,流量将转到服务容器。这是意料之中的,因为当然没有其他容器。
我根本找不到如何让 Traefik 与 Path、PathPrefix、PathPrefixStrip 或任何其他组合一起工作。这里和文档中的示例似乎表明我应该得到我想要的行为,但我无法实现。
我认为这部分
- "traefik.frontend.rule=Host:opencore.dev"
- "traefik.frontend.rule=PathPrefix:/api"
是错误的,因为第二行覆盖了第一行,试试这个:
- "traefik.frontend.rule=Host:opencore.dev;PathPrefix:/api"
我认为它会按照您想要的方式组合内容。
使用 docker 容器中的 Traefix 版本 1.2.3 我设置了以下文件。
traefik:
image: traefik
command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG
ports:
- "80:80"
- "8080:8080"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /dev/null:/traefik.toml
services:
image: opencoredata/ocdservices:0.2
labels:
- "traefik.backend=services"
- "traefik.frontend.rule=Host:opencore.dev"
- "traefik.frontend.rule=PathPrefix:/api"
# web:
# image: opencoredata/ocdweb:0.3
# labels:
# - "traefik.backend=web"
# - "traefik.frontend.rule=Host:opencore.dev"
如果我删除围绕 "web" 部分的评论,所有流量都将转到该容器,而忽略 Path 或 PathPrefix 或任何其他试图获取以 /api/ 开头的 URL 的尝试服务容器。
像上面一样注释掉 "web" 容器,流量将转到服务容器。这是意料之中的,因为当然没有其他容器。
我根本找不到如何让 Traefik 与 Path、PathPrefix、PathPrefixStrip 或任何其他组合一起工作。这里和文档中的示例似乎表明我应该得到我想要的行为,但我无法实现。
我认为这部分
- "traefik.frontend.rule=Host:opencore.dev"
- "traefik.frontend.rule=PathPrefix:/api"
是错误的,因为第二行覆盖了第一行,试试这个:
- "traefik.frontend.rule=Host:opencore.dev;PathPrefix:/api"
我认为它会按照您想要的方式组合内容。