带StripPrefix中间件的Docker traefik PathPrefix总是抛出HTTP_502

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

我有一个群集服务容器,暴露了端口5500。在容器中,https://localhost:5500/app上有一个Web UI。我的服务称为service1。

我正在使用traefik 2代理,并且我希望service1的Web UI在https://proxy.domain.com/service1/app上可用。

我的service1 traefik标签配置如下:

labels:
  - "traefik.http.routers.service1.rule=Host(`proxy.domain.com`) && PathPrefix(`/service1/app`)"
  - "traefik.http.middlewares.strip-s1.stripprefix.prefixes=/service1"
  - "traefik.http.routers.service1.service=service1@docker"
  - "traefik.http.services.service1.loadbalancer.server.port=5500"
  - "traefik.http.routers.service1.middlewares=strip-s1@docker"
  - "traefik.http.routers.service1.entrypoints=https"
  - "traefik.http.routers.service1.tls=true"

据我所知,traefik,通过这种配置,我可以调用与路由器规则匹配的https://proxy.domain.com/service1/app。 Traefik然后将从pathPrefix删除/ service1,因此/ app将保留并转发到端口5500上的服务容器,因此我认为该容器将在端口5500 / app上被调用。

但是当我在浏览器中调用https://proxy.domain.com/service1/app时,会收到HTTP_502错误的网关。

[当我执行curl -v https://proxy.domain.com/service1/app时,我也得到HTTP_502。

[当我执行curl -v https://proxy.domain.com:5500/app时,它可以工作,我连接到端口5500 / app,并重定向到容器中的端口5500 / app / login(此重定向由/ app后面的Web应用程序完成。

我做错了什么?我是否错误配置了traefik标签?

docker docker-compose reverse-proxy docker-swarm traefik
1个回答
0
投票

我既不是Traefik也不是Docker专家。但是我一直在研究类似的事情。我认为,问题是,stripprefix会剥离整个路径,而不仅仅是剥离您在标签中给出的部分。从stripprefix的v2.0 Traefik文档中:

例如,/ products可以匹配/ products,也可以匹配/ products / shoes和/ products / shirts。

由于路径在转发之前已被剥离,因此您的后端应在/上侦听。

因此,我认为您的Traefik路由器未转发到https://proxy.domain.com:5500/app。您可以将Treafik日志记录设置为DEBUG,然后使用docker logs traefik(或任何称为Traefik容器的名称)检查路由器实际上将请求转发至的位置。

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