Nginx 为几个网站充当代理。其中一个网站重定向到 SSO 登录,返回 URL 显示的为原始域,而不是代理域。
会议:
location /demo/web1 {
proxy_pass https://website1.net/web1/index.html;
proxy_redirect default;
proxy_redirect https://website1.net/web1/index.html https://proxywebsites.com/demo/web1;
}
location /demo/monitor {
proxy_pass https://monitorwebsite.net/monitor;
proxy_redirect default;
proxy_redirect https://monitorwebsite.net/monitor https://proxywebsites.com/demo/monitor;
}
location /Home/SignIn {
proxy_pass https://thirdWebsite.net/Home/SignIn;
proxy_redirect default;
proxy_redirect https://thirdWebsite.net/Home/SignIn https://proxywebsites.com/Home/SignIn;
}
它是如何工作的?当您加载 /demo/monitor 时,您将被重定向到 /Home/SignIn,然后您将从那里重定向到 SSO 网站,例如http://sso.com?id=blalba。问题是它使用“returnUrl”参数进行重定向,并且该参数中的返回 URL 不是代理,而是原点。例如: http://sso.com?id=blalba&ReturnUrl=monitorwebsite.net/monitor并且应该http://sso.com?id=blalba&ReturnUrl=proxywebsites.com/demo/monitor
答案1
nginx 似乎仅支持使用proxy_redirect
指令重写规范化的 URI。因此无法更改Location:
应用程序返回的标头中的任何查询参数。
因此,唯一的解决方案就是更改您的应用程序。