上一篇博客中,我们说到了Nginx服务器的搭建,这篇里面,我们看看如何将web项目发布到IIS中了之后,Nginx会将User的Request服务转到不同的服务器中。
首先,对我们的web项目中的web.config文件添加节点:
<span lang="zh-CN" style=""><sessionState mode="SQLServer" sqlConnectionString="Data Source=192.168.21.**;User ID=****;Password=************;" timeout="60"/>
<machineKey decryption="AES" decryptionKey="5F1557925F8D24767DC286744FDD864B90C03395B67A9DBD,IsolateApps" validationKey="7A71B5D7982E03DB59B8C951E8C55FA1538375259A1AF015AECC2A9ADC57A6A2ABC60A687E33570CA3465FA0902EC9C7BAAA5104ECF1B30B1F0A028EA9538C47,IsolateApps" />
</span>
当然了,上面的配置文件中的decryption和decryptionKey都是从下面的IIS中获取到的:
大家可能要问了,为什么要添加这样的节点?当我们Nginx将request请求发到不同的服务器中的时候,用户的Session信息是需要共享的,这就是前面的状态服务器,也就是说,一个用户request,两个IIS是通过访问状态服务器来识别用户是否存在这样的权限,访问我们的系统,或者进行什么样的操作。
这样,将该Web项目发布到IIS上面,我们需要做的是:
第一步:生成计算机秘钥
这是在发布我们Web服务器的IIS服务器上两台服务器中,那一台都可以。
双击进入之后,是这样的:
我们这里选择的加密方式,决定了上面Web.config文件中的:
<span style="font-family:KaiTi_GB2312;font-size:18px;">machineKey decryption="AES"</span>
后面两个
decryptionKey="5F1557925F8D24767DC286744FDD864B90C03395B67A9DBD,IsolateApps" validationKey="7A71B5D7982E03DB59B8C951E8C55FA1538375259A1AF015AECC2A9ADC57A6A2ABC60A687E33570CA3465FA0902EC9C7BAAA5104ECF1B30B1F0A028EA9538C47,IsolateApps" />
其实就是生成秘钥之后的两个密钥。
第二步:将我们的Web项目发布到我们的IIS中。
对我们的web项目中的web.config文件添加节点:
<span lang="zh-CN" style=""><sessionState mode="SQLServer" sqlConnectionString="Data Source=192.168.21.**;User ID=****;Password=************;" timeout="60"/>
<machineKey decryption="AES" decryptionKey="5F1557925F8D24767DC286744FDD864B90C03395B67A9DBD,IsolateApps" validationKey="7A71B5D7982E03DB59B8C951E8C55FA1538375259A1AF015AECC2A9ADC57A6A2ABC60A687E33570CA3465FA0902EC9C7BAAA5104ECF1B30B1F0A028EA9538C47,IsolateApps" />
</span>
当然了,配置文件中的decryption和decryptionKey都是从上面的IIS中获取到的:
这样,Web项目配置好这样的节点之后,将该Web项目发布到IIS上面
第三步:运行程序,我们访问的时候,只需要访问我们的Nginx服务器就可以了。
另外,状态服务器上就是Session信息存在在哪里呢?
我们打开第二张表:
这样我们就可以看到我们的Session信息了,每一个用户登陆之后,就会出现一条Session信息,这个Session信息中:
SessionId:用户名+计算机信息组成的(好像是计算机的MAC地址)
Created:创建时间
Expires:销毁时间
LockData:用户访问系统的最新更新时间,我们的默认的Timeout如果为60的话,那么就是Expires的日期是LockDate日期推迟1个小时,这个Web.config文件中设置的:
<span style="font-family:KaiTi_GB2312;font-size:18px;">sessionState mode="SQLServer" sqlConnectionString="Data Source=192.168.21.**;User ID=****;Password=************;" timeout="60"</span>
如果用户换了浏览器,或者在两外一台电脑上登陆的话,Session信息就会重新出现一条。
结语:
我们做到这里,还有可以做的更好的地方,大家试想一下,每一次用户登陆Session的信息就会出现在数据库中进行更新,而每一个的数据库的开始和关闭,都是一次IO操作,我们的访问速度会受到影响,我们可以将Session的信息放到缓存的集群里面,就可以解决这件事情,如果我们将我们的Session信息放到Redis集群,或者Memcached集群,这个问题就可以解决了,我们最终的效果图是这样的:
参考博客:http://blog.csdn.net/zhanghan18333611647/article/details/50284629