【问题标题】:Traefik 2.0 - Path router rule not working with docker labelsTraefik 2.0 - 路径路由器规则不适用于 docker 标签
【发布时间】:2019-10-31 12:56:19
【问题描述】:

我设置了一个 GraphQL Playground 监听端口 4000。

所以我添加了以下 Traefik 标签:

graphql:
  restart: unless-stopped
  labels:
    - traefik.enable=true
    - "traefik.http.routers.${CI_PROJECT_PATH_SLUG}-${CI_ENVIRONMENT_SLUG}-graphql.rule=Host(`graphql.${CI_ENVIRONMENT_HOST}`)"
    - traefik.http.routers.${CI_PROJECT_PATH_SLUG}-${CI_ENVIRONMENT_SLUG}-graphql.tls.certresolver=letsencrypt
    - traefik.http.services.${CI_PROJECT_PATH_SLUG}-${CI_ENVIRONMENT_SLUG}-graphql.loadbalancer.server.port=4000

当我尝试获取 graphql.site.com 时,这正在工作。

现在我希望它匹配site.com/graphql,所以我将路由器标签更改为:

"traefik.http.routers.${CI_PROJECT_PATH_SLUG}-${CI_ENVIRONMENT_SLUG}-graphql.rule=Host(`${CI_ENVIRONMENT_HOST}`) && Path(`/graphql`)"

使用此配置,site.com/graphql 出现 404 错误。

我错过了什么?

【问题讨论】:

  • /graphql路径上是否有后端监听?

标签: docker docker-compose traefik


【解决方案1】:

在我看来,没有后端应用程序正在监听路径 /graphql

解决方案 1:

让后端应用程序 (GraphQL) 监听路径 /graphql

也许您还应该使用PathPrefix(`/graphql`) 而不是Path(`/graphql`)

解决方案 2:

使用 traefik StripPrefix,它转发请求之前从路径中删除前缀

使用这些标签。

- "traefik.http.routers.${CI_PROJECT_PATH_SLUG}-${CI_ENVIRONMENT_SLUG}-graphql.rule=Host(`${CI_ENVIRONMENT_HOST}`)"
- "traefik.http.middlewares.stripprefix-graphql.stripprefix.prefixes=/graphql"
- "traefik.http.routers.${CI_PROJECT_PATH_SLUG}-${CI_ENVIRONMENT_SLUG}-graphql.middlewares=stripprefix-graphql@docker"

如果后端提供资产(例如图像或 Javascript 文件),您需要在后端实现额外的更改: 更多信息在这里:https://docs.traefik.io/middlewares/stripprefix/

希望这会有所帮助。

【讨论】:

  • 谢谢,确实是问题所在!我在我的 graphql 服务器上添加了/graphql,现在可以使用了。
【解决方案2】:

Path('') 是如何工作的?

(traefik 文档没有解释)

我想创建一个 traefik 入口规则,用于在主机名中查找子字符串,例如我想在所有 3 个示例中匹配 api

mysite.com/subroute1/api/get
mysite.com/subroute2/api/post
mysite.com/subroute2/api/post

PathPrefix 将不起作用,因为 subroute1、subroute2 和 subroute3 的前缀不同。

我可以使用Path('/api'),它适用于所有 3 个子路由吗? (或者没有类似PathContains('/api'))?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2023-04-06
    • 2022-06-20
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多