Nginx将请求分发到各web应用

介绍了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

时间: 2024-10-12 20:13:35

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

Nginx简单的请求分发跟负载均衡----分发到多台机器

需求: 请求http://10.3.10.99:8000分发到http://10.3.10.22:8089/time_discernhttp://10.3.10.99:8089/time_discern •? Nginx集群其实是:虚拟主机+反向代理+upstream分发模块组成的虚拟主机:接受和响应请求反向代理: 带?户去数据服务器拿数据upstream: 告诉Nginx去哪个数据服务器拿数据•? 数据?向1)虚拟主机接受?户请求2)虚拟主机去找反向代理3) 反向代理让去找upstream4)

nginx做反向代理和后端web服务器之间的交互

1.Nginx是什么? Nginx就是反向代理服务器. 首先我们先来看看什么是代理服务器,代理服务器一般是指局域网内部的机器通过代理服务发送请求到互联网上的服务器,代理服务器一般作用于客户端.比如GoAgent,翻墙神器. 一个完整的代理请求过程为:客户端首先与代理服务器创建连接,然后根据代理服务器所使用的代理协议,请求对目标服务器创建连接.或则获得目标服务器的指定资源.Web代理服务器是网络的中间实体.代理位于Web客户端和Web服务器之间,扮演"中间人"的角色. HTTP的代理服务

基于centos 7搭建Nginx网站服务器(包含虚拟web主机的配置)

Nginx专为性能优化而开发,其最大的优点就是它的稳定性和低系统资源消耗,以及对http并发连接的高处理能力,单台物理服务器可支持20000~50000个并发请求,正是如此,大量提供社交网络.新闻资讯.电子商务及虚拟主机等服务的企业纷纷选择Nginx来提供web服务,目前中国大陆使用nginx网站用户有:新浪.网易.腾讯,另外知名的微网志Plurk也使用nginx. Nginx是一个很牛的高性能Web和反向代理服务器,它具有有很多非常优越的特性: 高并发连接:官方测试能支撑5万并发连接,在实际生

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

前言 使用集群是网站解决高并发.海量数据问题的常用手段.当一台服务器的处理能力.存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求.这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力.通过负载均衡调度服务器,将来自浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈. 摘自<大型网站技术架构_核心原理与案例分析>

配置Nginx防止直接用IP访问Web服务器

看了很多Nginx的配置,好像都忽略了ip直接访问Web的问题,这样理论上不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面. 官方文档中提供的方法: If you do not want to process requests with undefined "Host" header lines, you may define a default server that just drops the requests: server { li

【Nginx】请求上下文

上下文与全异步web服务器的关系 请求上下文指在一个请求的处理过程中,把一些关键的信息保存下来的类似struct这样的结构体.每个http模块都可以有自己的上下文结构体,一般都是在刚开始处理请求时在内存池上分配它,之后当经由epoll.http框架再次调用到http模块的处理方法时,这个http模块可以由请求上下文结构体中获取信息.请求结束时就会销毁该请求的内存池,自然也就销毁了上下文结构体. Nginx是全异步处理的web服务器,http模块可能会多次反复处理同一个请求,所以必须定义上下文结构

研究 Spring MVC 将请求分发到 Spring 依赖注入的类实例

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 一上午时间,碰了 N 个钉子,不断地把钉子拨掉,记录一下选择的工具和方法: 1.首先 Spring Mvc 框架的下载,那么有三个包是必不可少的:

前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。

本文转自http://www.cnblogs.com/davidwang456/p/4090058.html 感谢作者 servlet的生命周期 首先我们回忆一下servlet的生命周期: Servlet生命周期分为三个阶段:[http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html] 1,初始化阶段  调用init()方法.Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init(

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

wsgi 全称web server gateway interface,wsgi不是服务器,也不是python模块,只是一种协议,描述web server如何和web application通信的规则.运行在wsgi上的web框架有bottle,flask,django uwsgi 和wsgi一样是通信协议,是uWSGI服务器的单独协议,用于定义传输信息的类型 uWSGI 是一个web服务器,实现了WSGI协议,uwsgi协议.a nginx web服务器,更加安全,更好的处理处理静态资源,缓存