重定向后反向代理不重写位置
Reverse proxy not rewriting location after redirect
我有一个像这样设置的 apache 反向代理:
<Location /test>
ProxyPass https://exampleUrl.com retry=0 ttl=50
ProxyPassReverse https://exampleUrl.com
</Location>
我正在向 https://localUrl/test/login.php?token=
发送用于登录的令牌以及我的请求
我被远程服务器重定向,反向代理将位置正确重写为:/test/sso.php?id=61127
我对 /test/sso.php?id=61127 的请求再次被重定向,但这次位置没有正确重写:/status/sso.php
所以它试图在我自己的服务器上找到资源,而它应该指向代理:/test/status/sso.php
我做错了什么,为什么第二个重定向位置没有重写?
首先,您应该始终匹配 ProxyPass 指令中的斜杠,也就是说,在本例中:https://exampleUrl should be https://exampleUrl/
因为它就是这样,您应该在 ProxyPassReverse 指令中执行相同的操作。
无论如何,最好检查后端的回复,将以下内容添加到您正在使用的 LogFormat 中:
%{Location}o
它将打印后端发送的任何位置,并帮助您了解出了什么问题,如果匹配的斜线不能解决您的问题,以防您的后端发送了您没有代理的 /status/。
我有一个像这样设置的 apache 反向代理:
<Location /test>
ProxyPass https://exampleUrl.com retry=0 ttl=50
ProxyPassReverse https://exampleUrl.com
</Location>
我正在向 https://localUrl/test/login.php?token=
发送用于登录的令牌以及我的请求
我被远程服务器重定向,反向代理将位置正确重写为:/test/sso.php?id=61127
我对 /test/sso.php?id=61127 的请求再次被重定向,但这次位置没有正确重写:/status/sso.php
所以它试图在我自己的服务器上找到资源,而它应该指向代理:/test/status/sso.php
我做错了什么,为什么第二个重定向位置没有重写?
首先,您应该始终匹配 ProxyPass 指令中的斜杠,也就是说,在本例中:https://exampleUrl should be https://exampleUrl/
因为它就是这样,您应该在 ProxyPassReverse 指令中执行相同的操作。
无论如何,最好检查后端的回复,将以下内容添加到您正在使用的 LogFormat 中:
%{Location}o
它将打印后端发送的任何位置,并帮助您了解出了什么问题,如果匹配的斜线不能解决您的问题,以防您的后端发送了您没有代理的 /status/。