如何使代理通行证反向重写相对重定向?



我在使用 Apache 和 ProxyPassReverse 时无法获得相对重定向。如果我在后端服务器上使用绝对重定向,即。Location: http://fake.frontend.com/cat,一切都按预期代理,但是如果我在后端服务器上使用相对重定向,即。Location: /cat它不起作用。

我在 Debian 上使用 Apache 2.4.25。

我在代理服务器上有以下配置:

<Location /test/>
ProxyPass http://fake.backend.local/
ProxyPreserveHost Off
ProxyPassReverse http://fake.backend.local/
SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyHTMLURLMap / /cat/
ProxyHTMLURLMap fake.backend.local/ /cat/
ProxyHTMLDocType "<!DOCTYPE html>"
</Location>

当我在http://fake.frontend.com/cat/上访问代理服务器时,后端服务器会根据登录与否进行重定向。如果未登录,我将被重定向 (302) 到/Signin。如果我已登录,我将被重定向 (302) 到/dashboard。如果后端应用程序在位置标头中使用绝对路径,即:http://fake.backend.local/Signin我然后浏览器按预期加载http://fake.frontend.com/cat/Signin。但是,如果后端应用程序在位置标头中使用相对路径,即:/Signin浏览器加载http://fake.frontend.com/Signin(注意丢失的猫)。

我想在后端使用相对路径,但仍然被重定向到http://fake.frontend.com/cat/Signin.如何将代理配置为使用相对位置标头?

我发现并 askapache.com 的文章有一个示例,其中应该将ProxyPassReverse设置为/.

更改为以下配置解决了我的问题:

<Location /test/>
ProxyPass http://fake.backend.local/
ProxyPreserveHost Off
ProxyPassReverse /
SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyHTMLURLMap / /cat/
ProxyHTMLURLMap fake.backend.local/ /cat/
ProxyHTMLDocType "<!DOCTYPE html>"
</Location>

最新更新