Traefik从一台主机重定向到另一台主机

时间:2020-03-04 14:31:31

标签: redirect reverse-proxy docker-swarm traefik

我们决定从子域结构转移到一个带有路径前缀的根域,但是互联网上有许多旧的URL。那么,有什么方法可以添加从旧URL到新URL的重定向? 例如, 我们将子域test.example.com切换为example.com/test,我可以使用docker-swarm YAML文件中的字符串正确访问站点 traefik.frontend.rule: Host:example.com;PathPrefixStrip:/test 但是当我尝试添加到Traefik时,配置重定向如下:

[http.middlewares]
  [http.middlewares.test-redirectregex.redirectRegex]
    regex = "^https://(*).example.com/)"
    replacement = "^https://example.com/${1}"

Traefik说它不知道将请求转发到哪里 如果我要添加: traefik.frontend.rule: Host:test.example.com,example.com;PathPrefixStrip:/test Traefik在两个主机上都添加了前缀。有什么方法可以解决这个问题而无需添加第二个反向代理?

1 个答案:

答案 0 :(得分:0)

假设您正在使用Traefik 2.1,则可以将以下中间件用于Traefik

[http.middlewares]
  [http.middlewares.blog-redirect.redirectRegex]
    regex = "^(https?://)(.*).example.com/(.*)$"
    replacement = "${1}example.com/${2}/${3}"
    permanent = true

激活上述中间件的重要步骤是在相应的路由器和服务上添加以下标签。例如,如果您使用blog服务,并且为其定义了blog路由器,则需要将下表添加到服务

traefik.http.routers.blog.middlewares=blog-redirect

此外,您的路由规则应类似于以下规则,以便能够处理两个域(或您为每个服务定义多个路由)

- traefik.http.routers.blog.rule=Host(`example.com`) && Path(`/test`) || Host(`api.example.com``) 

在此post中,您可以找到有关流量和重定向的更多信息