可以traefik重写重定向响应的位置标头(302)

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

我在某些服务之前使用traefik 2.0.2作为反向代理。一个后端服务正在返回重定向响应(302),其中位置标头包含绝对重定向的URL。后端的url无法从外部访问,如何重写位置以再次通过反向代理?

例如客户端请求http://my-domain/foo并收到包含位置标头包含http://backend:8080/foo/bar/的302响应,这当然是行不通的。

我正在寻找类似于apache mod_proxy的ProxyPassReverse的东西。我已经阅读了traefik的middlewares,但似乎没有适合我的要求。

我的简化配置:

# traefik.yml
entryPoints:
  web:
    address: ":80"

providers:
  file:
    filename: "dynamic-conf.yml"

# dynamic-conf.yml
http:
  routers:
    router1:
      entryPoints:
        - web
      service: service1
      rule: "PathPrefix(`/foo`)"
  services:
    service1
      loadBalancer:
        servers:
          - url: http://backend:8080
reverse-proxy traefik
1个回答
0
投票
不是找到一个选项来使用traefik重写服务响应的位置标头。replaceResponseHeaders的功能请求存在。

我的(临时)解决方案是使用RedirectRegex中间件在traefik中执行重定向,从而使后端服务不需要使用重定向进行响应。

更新后的配置如下:

# dynamic-conf.yml http: routers: router1: entryPoints: - web service: service1 rule: "PathPrefix(`/foo`)" middlewares: - my-redirect middlewares: my-redirect: # Workaround for service1 redirection redirectRegex: regex: "^https?://[^/]+/foo/?$" replacement: "/foo/webapp/" services: service1 loadBalancer: servers: - url: http://backend:8080

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