Traefik 2.0-路径路由器规则不适用于docker标签

问题描述 投票:0回答:1

我设置了一个在端口4000上监听的GraphQL游乐场。

所以我添加了以下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错误。

我想念什么?

docker docker-compose traefik
1个回答
0
投票

我认为没有后端应用程序在路径/graphql上侦听。

解决方案1:

使后端应用程序(GraphQL)在路径/graphql上侦听。

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

Solution2:

使用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/

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.