windows 下 nginx+iis 实现负载均衡方案

nginx安装

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、新浪、网易、腾讯等。

最新版本的nginx版本为1.9.3,我这下载的是window版本的,一般实际场景都是安装在linux系统下的,由于linux系统目前正在摸索中这里就不介绍。官方下载地址:nginx-1.9.3.zip 博客园下载地址:nginx-1.9.3.zip 。下载完成之后解压运行nginx.exe就启动了nginx了,启动后会在进程里面看到nginx。

要实现负载均衡需要修改conf/nginx.conf的配置信息,修改配置信息之后重新启动nginx服务,可以通过nginx -s reload指令实现。这里我们使用 Ants 提供的一个批处理来操作。

将nginx.bat文件放到nginx.exe相同文件夹下,直接运行就行了。文章结尾会提供本文用到的所有文件。

 

站点搭建及配置

1.搭建两个iis站点

站点下只有一个简单的index页面,用来输出当前服务器信息。由于我没有两台机器,所以将两个站点都部署到本机了,分别绑定了8082和9000两个端口。

 protected void Page_Load(object sender, EventArgs e)
        {
            Label0.Text = "请求开始时间:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            Label1.Text = "服务器名称:" + Server.MachineName;//服务器名称  
            Label2.Text = "服务器IP地址:" + Request.ServerVariables["LOCAL_ADDR"];//服务器IP地址  
            Label3.Text = "HTTP访问端口:" + Request.ServerVariables["SERVER_PORT"];//HTTP访问端口"
            Label4.Text = ".NET解释引擎版本:" + ".NET CLR" + Environment.Version.Major + "." + Environment.Version.Minor + "." + Environment.Version.Build + "." + Environment.Version.Revision;//.NET解释引擎版本  
            Label5.Text = "服务器操作系统版本:" + Environment.OSVersion.ToString();//服务器操作系统版本  
            Label6.Text = "服务器IIS版本:" + Request.ServerVariables["SERVER_SOFTWARE"];//服务器IIS版本  
            Label7.Text = "服务器域名:" + Request.ServerVariables["SERVER_NAME"];//服务器域名  
            Label8.Text = "虚拟目录的绝对路径:" + Request.ServerVariables["APPL_RHYSICAL_PATH"];//虚拟目录的绝对路径  
            Label9.Text = "执行文件的绝对路径:" + Request.ServerVariables["PATH_TRANSLATED"];//执行文件的绝对路径  
            Label10.Text = "虚拟目录Session总数:" + Session.Contents.Count.ToString();//虚拟目录Session总数  
            Label11.Text = "虚拟目录Application总数:" + Application.Contents.Count.ToString();//虚拟目录Application总数  
            Label12.Text = "域名主机:" + Request.ServerVariables["HTTP_HOST"];//域名主机  
            Label13.Text = "服务器区域语言:" + Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"];//服务器区域语言  
            Label14.Text = "用户信息:" + Request.ServerVariables["HTTP_USER_AGENT"];
            Label14.Text = "CPU个数:" + Environment.GetEnvironmentVariable("NUMBER_OF_PROCESSORS");//CPU个数  
            Label15.Text = "CPU类型:" + Environment.GetEnvironmentVariable("PROCESSOR_IDENTIFIER");//CPU类型  
            Label16.Text = "请求来源地址:" + Request.Headers["X-Real-IP"];
        }

2.修改nginx配置信息

修改nginx监听端口,修改http server下的listen节点值,由于本机80端口已经被占用,我改为监听8083端口。

listen       8083;

在http节点下添加upstream(服务器集群),server设置的是集群服务器的信息,我这里搭建了两个站点,配置了两条信息。

#服务器集群名称为Jq_one
upstream Jq_one {
  server  127.0.0.1:9000;
  server  127.0.0.1:8082;
}

在http节点下找到location节点修改

location / {
        root   html;
        index  index.aspx index.html index.htm; #修改主页为index.aspx
 #其中jq_one 对应着upstream设置的集群名称
 proxy_pass         http://Jq_one;
 #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
 proxy_set_header   Host             $host;
 proxy_set_header   X-Real-IP        $remote_addr;
 proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}

修改完成配置文件以后记得重启nginx服务,最终完整配置文件信息如下

3.运行结果

访问http://127.0.0.1:8083/index.aspx ,多访问几次,着重关注标红部分。

可以看到,我们的请求被分发到了8082站点和9000站点,并且第一次是8082站点第二次9000。出现这样的结果证明我们负载均衡搭建成功了。 尝试关闭其中的9000站点,然后刷新页面发现输出的http端口一直是8082,也就是说其中一个站点挂了,只要还有一个站点是好的,我们的还是可以服务。

问题分析

虽然我们搭建好了负载均衡站点,但是还存在以下问题。

1.如果站点使用了session,请求平均分配到两个站点,那么必然存在session共享问题,该如何解决?

使用数据库保存session信息
使用nginx将同一ip的请求分配到固定服务器,修改如下。ip_hash会计算ip对应hash值,然后分配到固定服务器

  upstream Jq_one{
  server 127.0.0.1:8082 ;
   server 127.0.0.1:9000 ;
  ip_hash;
  }

搭建一台Redis服务器,对session的读取都从该Redis服务器上读取。后面的文章将介绍分布式缓存Redis的使用

2.管理员更新站点文件,该怎么操作,现在还只有两台服务器,可以手工将文件更新到两台服务器,如果是10台呢,那么手工操作必然是不可行的

多服务器站点更新可以使用GoodSync 文件同步程序,会自动检测文件的修改新增,然后同步到其它服务器上。在linux下可以使用rsync

3.站点中的文件上传功能会将文件分配到不同的服务器,文件共享问题如何解决。

使用文件服务器将所有文件存储到该服务器上,文件操作读取写入都在该服务器上。这里同样会存在一个问题,文件服务器存在读写上限。

4.负载的服务器配置不一样,有的高有的低可不可以让配置高的服务器处理请求多一些

这里讲一下,负载均衡有好几种算法  轮转法,散列法, 最少连接法,最低缺失法,最快响应法,加权法。我们这里可以使用加权法来分配请求。

 upstream Jq_one{
  server 127.0.0.1:8082 weight=4;
   server 127.0.0.1:9000 weight=1;
  ip_hash;
  }

通过weight设置每台服务器分配请求站的权重,值越高分配的越多。

5.由于请求是经过nginx转发过来的,可以在代码里面获取到用户请求的实际ip地址吗?

答案是肯定的,在localtion节点设置如下请求头信息

#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
 proxy_set_header   Host             $host;
 proxy_set_header   X-Real-IP        $remote_addr;
 proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

代码里面通过Request.Headers["X-Real-IP"],就能获取到真实ip

6.nginx实现静态文件(image,js,css)缓存

在server节点下添加新的localtion
 #静态资源缓存设置
 location ~ \.(jpg|png|jpeg|bmp|gif|swf|css)$
        {
            expires 30d;
            root /nginx-1.9.3/html;#root:  #静态文件存在地址,这里设置在/nginx-1.9.3/html下
            break;
        }

这是index页面的代码 <li><img src="/images/1.jpg"/></li>

总结

通过nginx我们实现了一个简单的负载均衡,实际情况比这复杂很多。比如nginx服务器挂了,那我们的站点就直接挂了,正确的通过keepalived组件来搭建多台nginx服务提供服务。本篇只做为分布式系统的开篇,后续会陆续推出Redis缓存,数据库实现分布式架构的文章,敬请期待!希望能够得到博客园分布式大牛的指导。

另外一篇 Nginx 在windows下配合iis搭建负载均衡过程 也是值得分享的

因为项目遇到大量图片存储问题,虽然现在我们图片还不是很多(目前在1T上下,预计增长速度每年1.3倍的增长速度),自己在思考如何有效地存储大量图片时,查找一些资料,看到了,有人使用
Nginx搭建服务器,本着学习的目的,自己也亲自去体验了一下nginx在window下的安装过程,并配合iis搭建一个负载均衡的过程,环境如下:


解释一下,因为我自己就一台计算机,为了演示效果,所以安装了虚拟机。

计算机A : 本计算机上安装Nginx 同时也会配置IIS,为了不和Nginx的80端口冲突,务必要修改端口号,跟虚拟机B
配合,相当于2台服务器,来做负载均衡

虚拟机B: 模拟一台服务器,建立IIS,端口号使用80端口。

下面来说一下安装过程已经用到的资源

虚拟机资源:

迅雷下载地址:http://6.jsdx3.crsky.com/software1/VMwareworkstation-v9.0.1.zip

VM使用指南资料:
http://open-source.blog.163.com/blog/static/1267734512010714103659611/

Windows镜像资源:http://www.jb51.net/os/windows/Win2003/1904.html

Nginx资源:

中文nginx:http://www.ostools.net/apidocs/apidoc?api=nginx-zh

安装Nginx

1. 下载好后,解压文件到你指定的目录,不一定放在C:\ 下面,我自己就放在了


也是可以的,就是在启动时,需要CMD命令定位到 D:\program\nginx 目录下才可以

注意:本人下载的是 nginx-1.2.1 这个版本,解压后,将文件名nginx-1.2.1修改为nginx

2. 在正式安装前呢,先配置一下,打开目录下 的 conf/nginx.conf文件


然后修改


将这里的 80 修改为 任意端口号,我这里修改为8090.

3. 打开CMD 命令行工具,进入到nginx安装目录下,我这里就是 D:\program\nginx


然后输入:nginx


回车,没有任何提示,说明安装成功了,浏览器输入 127.0.0.1:8090


就算成功了一小步。

关闭Nginx的命令为 : nginx ?s stop

4. 接下来就是要配置一下服务器了,记得将刚才修改的conf/nginx.conf文件 还原回去,避免后面设置时发生混乱

前面说过了,我将Nginx 安装在了192.168.21.1 计算机上,那就先来配置这个上面的IIS,建立一个测试站点 www.nginxtest.com
端口为801


这个站点下面放置了一个 index.html 页面

5. 配置虚拟机上的IIS, 同上 ,唯一的区别就是端口号设置为 80 就可以了。

6. 修改nginx的配置文件 conf/nginx.conf 修改后的结果为:


这里详细说明一下:

A区域, 这里的 upstream 是加进去的,必须加在 server {} 这个节点配置之前

这个表示的是 有2台机器来做负载均衡的。www.nginxtest.com 是我自己配置的测试站点

B区域, 这里配置的是nginx监听的端口,这里用的是默认配置80端口,以及Nginx所在服务器IP,我这里是 192.168.21.1

C区域, 要代理的域名

配置完成后,再次启动nginx,这里进程里会有2个NGINX


浏览器输入地址: www.nginxtest.com

多刷新几次就会出现如下2种情况,就达到了2天服务负载均衡的效果了


多刷新几次,这个会交替出现。 大功告成!

时间: 2024-11-05 21:59:23

windows 下 nginx+iis 实现负载均衡方案的相关文章

windows下nginx+tomcat配置负载均衡的方法_nginx

目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Nginx 安装Nginx教程 2.配置两个Tomcat 在本机上配置两个Tomcat,分别为tomcat7-8081.tomcat7-8082. tomcat7-8081访问地址:http://localhost:8081,浏览显示内容:this is 8081 port tomcat7-8082访问

windows使用nginx实现网站负载均衡测试实例_win服务器

如果你关注过nginx,必定知道nginx这个软件有什么用的,如果你的网站访问量越来越高,一台服务器已经没有办法承受流量压力,那就增多几台服务器来做负载吧.做网站负载可以买硬件设备来实现,比如F5,不过价格就几十万到上百万,够贵,本文介绍做网站负载的软件是免费的,nginx目前好多门户网站与大访问量的网站都在使用做为HTTP服务器,所以nginx是非常优秀的,下面介绍做负载测试吧.环境:(2台服务器)第一台: CPU:Inter(R) Pentium(R) 4 CPU 2.8G 内存:1G 系统

Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)

概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效果,可以说还是非常的理想的.同时我们也收集到了不少的问题,比如说如何在这种分布式的架构下使用Session,NLB中有一台服务器挂掉了会导致对外暴露的地址无法访问,如果实现服务器之间的同步,如果更好的进行热修复等等,还有我们在上一篇中也提到了NLB所提供的功能是非常简单的,为了回答我们前面提到的问题

Nginx/LVS/HAProxy 负载均衡软件的优缺点详解

Nginx/LVS/HAProxy 负载均衡软件的优缺点详解 Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术.具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了:如果机器不少,可以用DNS轮询,LVS所耗费的机器还是比较多的:大型网站或重要的服务,且服务器比较多时,可以考虑

如何使用 Weave 以及 Docker 搭建 Nginx 反向代理/负载均衡服务器

Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动发现.它可以让我们更加专注于应用的开发,而不是基础架构.Weave 提供了一个如此棒的环境,仿佛它的所有容器都属于同个网络,不需要端口/映射/连接等的配置.容器中的应用提供的服务在 weave 网络中可以轻易地被外部世界访问,不论你的容器运行在哪里.在这个教程里我们将会使用 weave 快速并且简单

Windows下Nginx的启动、停止等命令&amp;amp;Nginx 配置多域名&amp;amp;windows下设置Nginx开机自动启动

Windows下Nginx的启动.停止等命令 在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动.停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍. 1.启动: C:\server\nginx-1.0.2>start nginx 或 C:\server\nginx-1.0.2>nginx.exe 注:建议使用第一种,第二种会使你的cmd窗口一直处于执行中,不能进行其他命令操作. 2.停止: C:\server\nginx-1.0.2>ngin

Windows下Nginx的安装与配置

Windows下Nginx的安装与配置 Nginx ("engine x") 是一款高性能的,轻量级的HTTP Web 服务器 和 反向代理服务器及电子邮件 IMAP/POP3/SMTP 代理服务器. Nginx 是由俄罗斯的程序设计师 Igor Sysoev 所开发,为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过四年多时间了,Igor 将源代码以类BSD许可证的形式发布. 自 Nginx 发布四年来,Nginx 已经因它的稳定性.丰富的功能集.示例配置

nginx 和 IIS 实现负载均衡

Nginx的作用和优点,这里不必多说,今天主要是nginx负载均衡实验,把做的步骤记录下来,作为一个学习笔记吧,也可以给大家做下参考. 1.Nginx安装 1.下载地址:http://nginx.org/en/download.html 2.解压到后在window的cmd窗口,输入如下图所示的命令,进入到nginx目录,使用"start nginx.exe "进行nginx的安装,如下图所示:              安装成功后,在"任务管理器"中会看到"

centos下配置Nginx反向代理负载均衡服务器教程

准备: Proxy-Server:1.1.1.22(负载均衡服务器) Nginx-Server23:1.1.1.23(web23) Nginx-Server24:1.1.1.24(web24) 环境版本: Linux Nginx-Proxy 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ①:安装配置完成Nginx WEB服务器预配置: [root@Nginx-Ser