tig*_*igu 7 reverse-proxy docker docker-compose docker-swarm traefik
我有一个 swarm 服务容器,暴露了 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"
Run Code Online (Sandbox Code Playgroud)
据我了解 traefik,通过此配置,我可以调用与路由器规则匹配的https://proxy.domain.com/service1/app。Traefik 然后将从 pathPrefix 中去除 /service1,因此 /app 将保留并转发到端口 5500 上的服务容器,因此我认为该容器将在端口 5500/app 上被调用。
但是当我在浏览器中调用https://proxy.domain.com/service1/app时,我得到 HTTP_502 Bad gateway。
当我这样做时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,这里是与 Traefik 2.2 和 phpmyadmin 作为后端一起使用的配置:
version: "2.4"
services:
pma:
image: phpmyadmin/phpmyadmin:latest
labels:
- "traefik.http.routers.pma.rule=Host(`admin.${DOMAIN}`) && PathPrefix(`/phpmyadmin`)"
- "traefik.http.routers.pma.middlewares=pma-stripprefix"
- "traefik.http.middlewares.pma-stripprefix.stripprefix.prefixes=/phpmyadmin"
environment:
- PMA_ABSOLUTE_URI=https://admin.${DOMAIN}/phpmyadmin/
Run Code Online (Sandbox Code Playgroud)
小智 -2
我既不是 Traefik 也不是 Docker 专家。但我一直在研究类似的事情。我认为,问题是, stripprefix 将剥离整个路径,而不仅仅是您在标签中给出的部分。来自 stripprefix v2.0 Traefik 文档:
例如,/products 会匹配 /products,但也会匹配 /products/shoes 和 /products/shirts。
由于路径在转发之前被剥离,因此您的后端应该侦听 /。
Therefore, I think your Traefik router is not forwarding tohttps://proxy.domain.com:5500/app. You could set your Treafik logging to DEBUG and then check with docker logs traefik (or whatever your Traefik container is called) where the router is actually forwarding the request to.
| 归档时间: |
|
| 查看次数: |
4462 次 |
| 最近记录: |