Docker 使用Traefik通过正则表达式将URL重定向到另一个URL
我想通过traefik将一个URL重定向到另一个URL 我正在使用docker进行此配置,下面是我的docker-compose.yml文件Docker 使用Traefik通过正则表达式将URL重定向到另一个URL,docker,docker-compose,traefik,Docker,Docker Compose,Traefik,我想通过traefik将一个URL重定向到另一个URL 我正在使用docker进行此配置,下面是我的docker-compose.yml文件 version: '3' services: reverse-proxy: # The official v2.0 Traefik docker image image: containous/whoami container_name: "whoami_cont" # Enables the web UI and t
version: '3'
services:
reverse-proxy:
# The official v2.0 Traefik docker image
image: containous/whoami
container_name: "whoami_cont"
# Enables the web UI and tells Traefik to listen to docker
ports:
# The HTTP port
- 80:80
# The Web UI (enabled by --api.insecure=true)
- 8080:8080
labels:
- traefik.http.middlewares.test-replacepathregex.replacepathregex.regex=^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]
- traefik.http.middlewares.test-replacepathregex.replacepathregex.replacement=http://localhost:8081/4
然后我成功运行docker compose命令。然后,我将点击任何匹配正则表达式模式的URL,但该URL不会重定向到另一个URL-根据配置。
我使用的是traefik 2.0版
如果缺少任何配置,请通知我。下面,您的配置似乎缺少一个实际的Traefik实例:
traefik:
image: "traefik:v2.0.0-rc3"
container_name: "traefik"
command:
- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
将Traefik添加到docker compose文件并定义后,应将中间件连接到路由器:
- "traefik.http.routers.whoami.middlewares=test-replacepathregex"
- "traefik.http.middlewares.test-replacepathregex.replacepathregex.regex=^/foo/(.*)"
- "traefik.http.middlewares.test-replacepathregex.replacepathregex.replacement=/bar/$$1"
用/bar/123
替换/foo/123
的完整且有效(但简化)的示例:
version: "3.3"
services:
traefik:
image: "traefik:v2.0.0-rc3"
container_name: "traefik"
command:
- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoami:
image: "containous/whoami"
container_name: "simple-service"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`localhost`)"
- "traefik.http.routers.whoami.entrypoints=web"
- "traefik.http.routers.whoami.middlewares=test-replacepathregex"
- "traefik.http.middlewares.test-replacepathregex.replacepathregex.regex=^/foo/(.*)"
- "traefik.http.middlewares.test-replacepathregex.replacepathregex.replacement=/bar/$$1"
containous/whoami
不是真正的Traefik docker映像,它只是一个用于测试的简单服务器。那么我应该使用哪个映像?我尝试过traefik:v2.1.0图像,但没有成功。谢谢你的帮助。它构建成功,但当我点击URL时,它并没有重定向到替换URL。我可以看到whoami服务的输出,如官方示例所示,但URL重定向没有发生。因为它不是重定向,所以它是一个替换:您在浏览器中看到相同的值,但后端看到另一个值(查看whoami
response)。如果您需要重定向,请使用类似于replacepath中间件的重定向中间件。谢谢。whoami服务的响应非常适合替换,但当我使用重定向中间件时,浏览器URL并没有重定向,并且显示404页面未找到。对此有什么想法吗?很可能是您错误配置了中间件,需要对此进行调查。无论如何,问题的原始问题是,您实际上没有将中间件连接到路由器。现在,当您连接它时,就可以开始调试下一个问题了。是的,Yury,关于将中间件连接到路由器,您是正确的。我错过了这部分。现在,我能够通过您提供的示例成功地重定向它。谢谢你的帮助。