将Traefik StripPrefix中间件添加到docker-compose标签结果为504
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Traefik StripPrefix中间件添加到docker-compose标签结果为504相关的知识,希望对你有一定的参考价值。
我已经开发了几个docker化的全栈Web应用程序,我正在尝试将请求路由到使用Traefik。我想通过docker-compose标签利用动态配置。我想应用stripPrefix中间件选项,以便可以使用相同的应用程序路由,就好像每个应用程序都在根目录中一样。但是,一旦应用了这些规则,就会导致504网关超时响应。
这是我的设置:
- Traefik 2.0.1
- Docker 19.03.2,撰写1.24.1
- nginx:最新图像
- 运行Traefik容器的
global
docker网络 - 多个多容器应用程序,每个应用程序都包含一个NGINX Web服务器
- [所有应用程序都有自己的
local
网络,NGINX容器也位于global
网络上。 - 每个应用程序都配置为在
/
处监听
这里是有问题的NGINX容器的docker-compose.yml
定义:
nginx:
image: nginx:latest
container_name: "mps_nginx"
volumes:
- ./nginx/confs/nginx.conf:/etc/nginx/default.conf
- ./static:/www/static
restart: "always"
labels:
- traefik.http.routers.mps.rule=Host(`localhost`) && PathPrefix(`/mps`)
- traefik.http.middlewares.strip-mps.stripprefix.prefixes=/mps
- traefik.http.routers.mps.middlewares=strip-mps@docker
networks:
- default
- mps
加重部分是,当我注释掉middlewares
标签时,它运行得很好,但是找不到匹配的URL模式。
在此之前,我使用whoami
中定义的Traefik Quickstart Tutorial容器测试了我的方法:
# Test service to make sure our local docker-compose network functions
whoami:
image: containous/whoami
labels:
- traefik.http.routers.whoami.rule=Host(`localhost`) && PathPrefix(`/whoami`)
- traefik.http.middlewares.strip-who.stripprefix.prefixes=/whoami
- traefik.http.routers.whoami.middlewares=strip-who@docker
对http://localhost/whoami
的请求返回(除其他事项外)GET / HTTP/1.1
。
这正是我期望我的路由方法能够用于所有其他应用程序的方式。 Traefik仪表板在我注册的每个中间件周围都显示为绿色,但我看到的只是504错误。
[如果有人有任何线索,我将不胜感激。
答案
[前缀为issue,但不以'/'结尾。像这样测试您的配置:
- "traefik.http.routers.whoami.rule=Host(`localhost`) && (PathPrefix(`//whoami/`) || PathPrefix(`/portainer`))"
- "traefik.http.middlewares.strip-who.stripprefix.prefixes=/whoami"
以上是关于将Traefik StripPrefix中间件添加到docker-compose标签结果为504的主要内容,如果未能解决你的问题,请参考以下文章
为啥我需要使用 http.StripPrefix 来访问我的静态文件?