我使用 IIS 和 URL 重写作为反向代理。我的实际 Web 应用程序托管在无法直接访问互联网的服务器上。
在重写规则中,我将反向代理的主机名替换为本地 IP 地址。这很好用。
不过,我使用的应用程序提供下载。一旦客户端发出下载请求,服务器端进程就会重定向到实际的下载文件。
这是我遇到问题的地方。会话 cookie (JSESSIONID) 似乎未在反向代理和本地服务器之间正确共享。我没有被重定向到下载文件,而是从本地服务器收到 401“未授权”消息。
我在这里发现了类似的问题。如何在反向代理后面正确设置 JSESSIONID cookie 路径 https://stackoverflow.com/questions/9486498/how-to-properly-set-jsessionid-cookie-path-behind-reverse-proxy用户使用 Apache 作为反向代理并使用ProxyPassReverseCookieDomain
重写cookie域名。
IIS中有类似的设置吗?
我尝试了以下出站规则,但这不起作用。
<preCondition name="contains-domain-set-cookie-header">
<add input="{RESPONSE_Set_Cookie}" pattern=".*?domain=MYDOMAIN*?" />
</preCondition>
<rule name="rewrite cookie domain" preCondition="contains-domain-cookie-header">
<match serverVariable="RESPONSE_Set_Cookie" pattern="^(.*?domain=)MYDOMAIN(.*?)$" negate="false" />
<action type="Rewrite" value="{R:1}MYLOCALIP{R:2}" />
</rule>
还有其他方法可以处理这个问题吗?
Thanks,
Thomas
找到了答案here https://stackoverflow.com/questions/14841986/iis-aar-url-rewrite-for-reverse-proxy-how-to-send-http-host?rq=1 and here https://stackoverflow.com/questions/1842885/modifying-headers-with-iis7-application-request-routing
要保留主机标头,请从命令行运行此命令以更新 Machine/webroot/apphost 配置
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)