IIS实现反向代理时Cookie域的设置方法
反向代理
神马是反向代理?指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。我们可以通过反向代理实现负载平衡、突破防火墙限制等一些非常实用的Web服务器功能,目前反向代理不管在私有云还是公有云的虚拟机上用的很多很多。
引用
IIS通过URL重写可以实现反向代理,通过简单的配置即可以将请求转发到其它内部站点。
此时被代理的所有站点的cookie的域(domain)会自动设置为提供反向代理功能的站点的域,这一般来说没有问题。但是在多站点共享cookie时会存在问题。
比如有一个对外的域名 proxy.fireflysoft.net,这个域名指向一个提供反向代理的站点;然后还有一个域名pay.fireflysoft.net,指向一个独立的IIS站点,提供支付服务;然后proxy.fireflysoft.net/mall 提供商城服务,用户在这里下单后支付,需要跳转到pay.fireflysoft.net;
为了在这两个站点之间实现用户状态共享,这里希望他们之间可以共享SessionID,这个值保存在cookie中,所以实际上是期望共享cookie,共享cookie可以通过设置不同站点cookie的域为相同的值来实现。
比如这里希望proxy.fireflysoft.net和pay.fireflysoft.net的cookie域值都为fireflysoft.net,这样proxy.fireflysoft.net的用户状态就可以为pay.fireflysoft.net所使用。但是这面临上边提到的反向代理站点cookie域自动设置问题。
关于这个问题,网上可以搜索到的方案大部分都是Nginx的,其实IIS的URL重写也是支持的,只不过用的人可能比较少,所以查不到什么资料。
这个解决方案是在IIS的论坛上找到的,有人问同样的问题:https://forums.iis.net/t/1193378.aspx。帖子中并没有给出直接的答案,而是参考一个使用URL重写设置cookie HttpOnly的方案:
http://clarify.dovetailsoftware.com/gsherman/2011/01/20/using-the-url-rewrite-module-to-set-your-cookies-to-httponly/
有兴趣的可以读一下原文,下边将直接给出解决方案。
URL重写的规则会保存到web.config中,因为设置cookie属于URL重写的出站规则,所以直接在出站规则中增加相关配置:
<rewrite> <outboundRules> <rule name="Add Domain" preCondition="No Domain"> <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" /> <action type="Rewrite" value="{R:0}; domain=fireflysoft.net" /> <conditions> </conditions> </rule> <preConditions> <preCondition name="No Domain"> <add input="{RESPONSE_Set_Cookie}" pattern="." /> <add input="{RESPONSE_Set_Cookie}" pattern="; domain=.*" negate="true" /> </preCondition> </preConditions> </outboundRules> </rewrite>
代码中包含两部分:
首先是前提条件preConditions:针对响应时设置cookie,且没有设置cookie domain的情况;
然后是处理规则rule:针对响应时设置的cookie,重写cookie,增加domain的设置。
这样cookie domain即设置为目标值,从而实现cookie在二级域名之间的共享。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
- 虚拟主机设置(IIS一机多站的实现方法)
- 设置IIS实现禁止js文件缓存及其它两种方法
- javascript实现设置、获取和删除Cookie的方法
- iis中cookie的设置方法(二)
- iis中cookie的设置方法
- 两个IP实现IIS和Apache公用80端口的设置方法
- 两个IP实现IIS和Apache公用80端口的设置方法
- iis中cookie的设置方法
- iis中cookie的设置方法(三)
- javascript实现设置、获取和删除Cookie的方法
- Windows2003 IIS上设置301定向,实现不带www域名跳转带www域名的方法
- 设置iis主机头实现二级域名
- win2000 IIS支持shtml shtm的设置方法[原创]
- 解析网站301重定向的实现方法,包括iis,apache,asp,php的方法
- [转]网站二级域名用asp.net 2.0的实现方案 IIS设置
- 利用C#创建 IIS 站点并设置.NET Framework版本为ASP.NET 2.0 的方法(二)
- ASP中Cookie读写的实现方法
- 301 重定向(iis,Apache,asp,php,ColdFusion,旧域名),永久重定向实现方法。
- 利用C#创建 IIS 站点并设置.NET Framework版本为ASP.NET 2.0 的方法(一)
- iis下设置301 Redirect 永久重定向的方法