traefik 可以重写重定向响应的位置 header (302)
Can traefik rewrite the location header of redirect responses (302)
我在某些服务前使用 traefik 2.0.2 作为反向代理。一项后端服务正在返回重定向响应 (302),其中位置 header 包含绝对重定向 url。后台的url从外面是访问不到的,如何重写location再次通过反向代理?
例如客户端请求 http://my-domain/foo
并收到位置 header 包含 http://backend:8080/foo/bar/
的 302 响应,这当然不会起作用。
我正在寻找类似于 traefik 的 ProxyPassReverse of apache mod_proxy. I have read through the available 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
我没有找到一个选项来使用 traefik 重写服务响应的位置header。
存在 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
我和你有同样的问题,无法用你的解决方案解决它,但是现在,有了 traefik 插件,我们可以:
静态配置:
pilot:
token: "xxxx"
experimental:
plugins:
rewriteHeaders:
modulename: "github.com/XciD/traefik-plugin-rewrite-headers"
version: "v0.0.2"
动态配置:
http:
routes:
my-router:
rule: "Host(`localhost`)"
service: "my-service"
middlewares :
- "rewriteHeaders"
services:
my-service:
loadBalancer:
servers:
- url: "http://127.0.0.1"
middlewares:
rewriteHeaders:
plugin:
rewriteHeaders:
header: "Location"
regex: "^http://(.+)$"
replacement: "https://"
免责声明:我是插件的作者
我在某些服务前使用 traefik 2.0.2 作为反向代理。一项后端服务正在返回重定向响应 (302),其中位置 header 包含绝对重定向 url。后台的url从外面是访问不到的,如何重写location再次通过反向代理?
例如客户端请求 http://my-domain/foo
并收到位置 header 包含 http://backend:8080/foo/bar/
的 302 响应,这当然不会起作用。
我正在寻找类似于 traefik 的 ProxyPassReverse of apache mod_proxy. I have read through the available 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
我没有找到一个选项来使用 traefik 重写服务响应的位置header。 存在 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
我和你有同样的问题,无法用你的解决方案解决它,但是现在,有了 traefik 插件,我们可以:
静态配置:
pilot:
token: "xxxx"
experimental:
plugins:
rewriteHeaders:
modulename: "github.com/XciD/traefik-plugin-rewrite-headers"
version: "v0.0.2"
动态配置:
http:
routes:
my-router:
rule: "Host(`localhost`)"
service: "my-service"
middlewares :
- "rewriteHeaders"
services:
my-service:
loadBalancer:
servers:
- url: "http://127.0.0.1"
middlewares:
rewriteHeaders:
plugin:
rewriteHeaders:
header: "Location"
regex: "^http://(.+)$"
replacement: "https://"
免责声明:我是插件的作者