介绍了VMWare12虚拟机、Linux(CentOS7)系统安装、部署Nginx1.6.3代理服务做负载均衡。接下来介绍通过Nginx将请求分发到各web应用处理服务。

一、Web应用开发

  1、asp.net mvc5开发

  (1)新建一个MVC5工程,新建一个Controller,在Index方法实现将当前时间保存到Session["mysession"],并写Cookies["mycookies"]存储主机名和当前时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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原理此处不做介绍,网上搜索下大把。

  2、Session共享技术

  .Net平台对支持几种session存储模式:

  (1)InProc 模式

    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

  3、Nginx服务状态情况

  在centos终端输入命令service nginx status 查看情况,确保服务正常运行。

  4、Web站点部署

  部署两个站点分别为:

  站点A:端口为8081,

  站点B:端口为8082,

  

二、功能效果展现

  (1)浏览器访问Index方法,http://192.168.119.128/demo,显示如下:

        

  (2)浏览器访问GetSession方法,http://192.168.119.128/demo/getsession,显示如下:

    

  通过以上验证,获取到的session和cookies都是一致。

作者:andon 
出处:http://www.cnblogs.com/Andon_liu 

Nginx将请求分发到各web应用的更多相关文章

  1. nginx实现请求转发

    反向代理适用于很多场合,负载均衡是最普遍的用法. nginx 作为目前最流行的web服务器之一,可以很方便地实现反向代理. nginx 反向代理官方文档: NGINX REVERSE PROXY 当在 ...

  2. nginx实现请求的负载均衡 + keepalived实现nginx的高可用

    前言 使用集群是网站解决高并发.海量数据问题的常用手段.当一台服务器的处理能力.存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求.这种 ...

  3. [阿里云部署] Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器

    部署地址:123.56.7.181 Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器 这个标题就比之前的"ECS服务器配置Web环境的全过程及参考资料&qu ...

  4. nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    nginx+uWSGI+django+virtualenv+supervisor发布web服务器   导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以 ...

  5. nginx限制请求之三:Nginx+Lua+Redis 对请求进行限制

    相关文章: <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <n ...

  6. nginx+uwsgi+django+virtualenv+supervisor部署web服务器

    wsgi 全称web server gateway interface,wsgi不是服务器,也不是python模块,只是一种协议,描述web server如何和web application通信的规则 ...

  7. 并发测试 java.lang.OutOfMemoryError: GC overhead limit exceeded Xms Xmx 阻塞请求 单节点 请求分发 负载均衡

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:705) at javax.servlet.http.HttpServlet.se ...

  8. 【Nginx】请求上下文

    上下文与全异步web服务器的关系 请求上下文指在一个请求的处理过程中,把一些关键的信息保存下来的类似struct这样的结构体.每个http模块都可以有自己的上下文结构体,一般都是在刚开始处理请求时在内 ...

  9. Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    目录 Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器 crm django项目部署流程 使用supervisro启动uwsgi,退出虚 ...

随机推荐

  1. ios23-文件上传

    1.上传图片 3. // //  ios23_uploadViewController.h //  ios23-upload // //  Created by  on 13-6-17. //  Co ...

  2. [读书笔记]黑客与画家[Hackers.and.Painters]

    (书生注:这本书写的不错.针对程序员,可以带来不同角度的想法,有助于反思自己的程序员工作.我甚至从中发现了自己爱用铅笔的原因...  尤其是其中关于黑客的定义,包括黑客认为的乐趣和目的,让人更深层次思 ...

  3. 一切皆为 JavaScript

    JavaScript起源于Netscape公司的LiveScript语言,这是一种基于对象和事件驱动的client脚本语言.最初的设计是为了检验HTML表单输入的正确性. 早些年,JavaScript ...

  4. VC 中与字符串相关的宏 _T、TEXT,_TEXT、L 的作用(简单明了)

    一. 在字符串前加一个L作用:    如  L"我的字符串"    表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节.   strlen("as ...

  5. Java Web Services (1) - 第1章 Web服务快速入门

    SCRIPTS_DIR=/Users/liuzhaofu/opus-dev/product/tools/devPRODUCT_DIR=/Users/liuzhaofu/opus-dev/product ...

  6. 使用URLConnection提交请求

    URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和URL之间的通信连接.程序可以通过URLConnection实例向该URL发送请求,读取URL ...

  7. extern 使用方法具体解释

    在C语言中,修饰符extern用在变量或者函数的声明前,用来说明"此变量/函数是在别处定义的.要在此处引用".(extern能够置于变量或者函数前,以标示变量或者函数的定义在别的文 ...

  8. delphi中用代码实现注册Ocx和Dll(有点怪异,使用CallWindowProc来调用指定函数DllRegisterServer)

    在windows系统中,可以通过Regsvr32来实现注册ocx或者dl, 编程时,调用Regsvr32来注册,却不能正常执行.尤其是在Win7系统中,需要管理员身份才能运行. 使用下面的代码则能正常 ...

  9. oschina图形和图像工具开源软件

    图形和图像工具开源软件 http://www.oschina.net/project/tag/181/imagetools?sort=view&lang=21&os=0

  10. Hbase0.96源码之HMaster(一)

    从main()函数開始 public static void main(String [] args) { VersionInfo.logVersion(); new HMasterCommandLi ...