上一篇文章介绍了VMWare12虚拟机、Linux(CentOS7)系统安装、部署Nginx1.6.3代理服务作负载均衡。接下来介绍经过Nginx将请求分发到各web应用处理服务。nginx
1、Web应用开发web
一、asp.net mvc5开发redis
(1)新建一个MVC5工程,新建一个Controller,在Index方法实现将当前时间保存到Session["mysession"],并写Cookies["mycookies"]存储主机名和当前时间。数据库
public ActionResult Index() { if (this.HttpContext.Session["mysession"] == null) { this.HttpContext.Session["mysession"] = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); } this.HttpContext.Response.Cookies.Add(new HttpCookie("mycookies") { Expires = DateTime.Now.AddDays(1), Value = HttpContext.Server.MachineName + "||" + DateTime.Now.ToString() }); return View(); }
(2)在Controller中新增第二个方法GetSession,显示Session和Cookies的值。centos
public ActionResult GetSession() { if (this.HttpContext.Session["mysession"] != null) { ViewBag.DD = this.HttpContext.Session["mysession"].ToString(); ViewBag.SCode = this.HttpContext.Session["mysession"].GetHashCode().ToString(); ViewBag.SID = this.HttpContext.Session.SessionID; } ViewBag.CVAL = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Value; ViewBag.CID = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Name; ViewBag.CDO = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Domain; return View(); }
(3)将session和cookies信息在页面显示,GetSession视图代码以下:设计模式
@{
ViewBag.Title = "GetSession";
}
<h2>站点:A -- GetSession</h2>
<span>站点:A</span>
<br />
<span>Session Value: @ViewBag.DD</span>
<br/>
<br />
<span>Session SCode: @ViewBag.SCode</span>
<br />
<br />
<span>Session ID: @ViewBag.SID</span>
<br />
<br />
<span>Cookies ID: @ViewBag.CID</span>
<br />
<br />
<span>Cookies Values: @ViewBag.CVAL</span>
<br />
<br />
<span>Cookies Values: @ViewBag.CDO</span>
以上实现session和cookies读写,为了验证负载均衡下,每次请求处理是否保持一致,接下来重要内容,作负载均衡如何如何保持session一致,对于asp.net技术session原理此处不作介绍,网上搜索下大把。浏览器
二、Session共享技术缓存
.Net平台对支持几种session存储模式:cookie
(1)InProc 模式session
session存储于当前站点在同一个进程内,修改web.config或者bin中文件更新,会致使session丢失。此模式为默认模式。
(2)aspnet state 模式
aspnet state是将session存储在状态服务中,须要启动ASP.NET State Service,能看到进程aspnet_state.exe。还须要在web.config配置此模式。
(3)SQLServer 模式
此模式须要SQL Server配置相关信息,启动代理服务、数据库帐号及表,并将web.config指向数据库。
(4)第三方扩展 模式
本框架采用此模式,将session存储到其余存储,好比:Memcached、redis缓存中,达到共享session的目的。能够经过实现ASP.NET中的SessionStateStoreProviderBase这个抽象类扩展。本系统采用将session存储在redis缓存中,经过引入 RedisSessionStateProvider组件。
Install-Package Microsoft.Web.RedisSessionStateProvider
三、Nginx服务状态状况
在centos终端输入命令service nginx status 查看状况,确保服务正常运行。
四、Web站点部署
部署两个站点分别为:
站点A:端口为8081,
站点B:端口为8082,
2、功能效果展示
(1)浏览器访问Index方法,http://192.168.119.128/demo,显示以下:
(2)浏览器访问GetSession方法,http://192.168.119.128/demo/getsession,显示以下:
经过以上验证,获取到的session和cookies都是一致。