nginx是俄罗斯人开发的一款跨平台的高性能HTTP和反向代理服务器,可以利用它实现web应用服务器的负载均衡。

反向代理是指将用户请求通过代理服务器转发给后端内部网络的应用服务器,典型的应用比如配置nginx、lighttpd等反向代理软件实现负载均衡。与反向代理相对应的叫正向代理,典型的应用比如vpn。用户直接访问google网站访问不了,而代理服务器可以访问google网站。这样用户就通过访问代理服务器,从而间接的达到访问google网站的目的。

负载均衡是指将用户发起的大量web请求通过一定的算法分摊到多个应用服务器,从来达到降低服务器负载压力的目的。

nginx官方网站:http://nginx.org/,可以在网站上面进行下载。本篇博客结合windows/iis+asp.net+nginx实现负载均衡,所以我们下载对应的windows版的nginx。下载之后,我们解压看到nginx如下目录:

我们打开conf目录下的nginx.conf文件,修改为如下的配置:

#user  nobody;
worker_processes 4; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; #gzip on; upstream cluster_server {
     #ip_hash;
server 10.77.137.120:9000 weight=1;
server 10.77.137.11:8081 weight=2;
} server {
listen 8083;
server_name guwei4037-pc; #charset utf-8; #access_log logs/host.access.log main; location / {
root html;
index index.aspx index.html index.htm; #指向集群名称为cluster_server
proxy_pass http://cluster_server; #设置主机头和客户端真实地址,以便服务器获取客户端真实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; #禁用缓存
proxy_buffering off;
} location ~ \.(jpg|png|jpeg|bmp|gif|swf|css)$
{
expires 30d;
root /nginx-1.9.3/html;#root: #静态文件存在地址,这里设置在/nginx-1.9.3/html下
break;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
} # another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} # HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }

如上配置文件有几点需要说明:

1、worker_processes 指定为4,表示有4个工作进程,这个数值一般与服务器的CPU核心数一致。通过start nginx启动nginx服务后,可以通过任务管理器观察进程可以看到nginx的进程数。

其中有1个是master(守护进程),4个是worker(工作进程)。如果指定worker_processes为1,则会有两个nginx.exe进程(1个master,1个worker)。

2、worker_connections指定的1024为默认的最大的连接数。可以指定更大的连接数,但要根据nginx服务器的配置来定。

3、keepalive_timeout指定的65s为保持连接的超时时间。

4、通过server-location-proxy_pass,与设置的cluster_server集群绑定。

5、通过upstream节点配置了cluster_server。里面的两个server分别指向两个不同的服务器,通过weight(权重)设置访问两台服务器的概率。如上有个配置#ip_hash,被注释掉了,因为它不能与weight同时使用。ip_hash的作用就是将用户的请求始终落到固定的一台服务器上(比如session、缓存等应用场景,不可能每一台服务器都复制一份相同的数据)。

6、在server-location下的index,添加index.aspx,用于支持asp.net页面的访问。

然后我们开发一个aspx页面,用于演示。

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

然后将它发布到多个服务器的iis中,比如如上配置的10.77.137.120:9000和10.77.137.11:8081两个地址。我们访问我们监听的8083端口,地址为:http://10.77.137.120:8083/,可以看到如下的页面。

多刷新几次,可以看到新的地址信息:

如上便实现了负载均衡。

参考资料:

http://www.cnblogs.com/yanweidie/p/4658136.html

配置nginx实现windows/iis应用负载均衡的更多相关文章

  1. 配置nginx实现windows/iis应用负载均衡(转载)

    配置nginx实现windows/iis应用负载均衡   nginx是俄罗斯人开发的一款跨平台的高性能HTTP和反向代理服务器,可以利用它实现web应用服务器的负载均衡. 反向代理是指将用户请求通过代 ...

  2. Nginx + Tomcat Windows下的负载均衡配置

     Nginx + Tomcat Windows下的负载均衡配置 一.为什么需要对Tomcat服务器做负载均衡?    Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果超过50 ...

  3. 在ubuntu上面配置nginx实现反向代理和负载均衡

    上一篇文章(http://www.cnblogs.com/chenxizhang/p/4684260.html),我做了一个实验,就是利用Visual Studio,基于Nancy框架,开发了一个自托 ...

  4. Linux 下配置 nginx + 两个 tomcat 的负载均衡

    前提:已经安装了 nginx 和两个 tomcat 1.修改 nginx.conf 配置文件    1)在 http{} 节点之间添加 upstream 配置 2)修改 nginx 的监听端口,默认是 ...

  5. asp.net中 使用Nginx 配置 IIS站点负载均衡

    这是一偏初学者入门的内容,发现有问题的地方,欢迎留言,一起学习,一起进步 本文主要记录一下在Windows平台中,IIS站点如何使用Nginx 做一个简单的负载均衡  一. 准备工作: 官网下载安装包 ...

  6. Nginx+Tomcat在Windows下做负载均衡

    一. 为什么需要对Tomcat服务器做负载均衡 Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果有超过500的并发数便会出现Tomcat不能响应新的请求的情况,严重影响网站的 ...

  7. linux 常用命令 和 nginx(反响代理、负载均衡)安装和配置

    (1)linux常用命令 [1]在光标前输入内容:i [2]删除输入方式下所输入的文本:Ctrl+u  [3]文件保存退出:wq [4]文件不保存退出:q [5]文件强制退出:q! [6]常规删除文件 ...

  8. asp.net:如何实现负载均衡方案讨论 (nginx+iis实现负载均衡)

    5台阿里云服务器,ip地址分别为 ip地址                      名字简称      操作系统       iis服务器     cpu   内存DDR3      机械硬盘 11 ...

  9. Nginx+Tomcat多实例及负载均衡配置

    Nginx+Tomcat多实例及负载均衡配置 采用nginx的反向代理负载均衡功能,配合后端的tomcat多实例来实现tomcat WEB服务的负载均衡 01 安装nginx服务 安装所需的pcre库 ...

随机推荐

  1. spring-data-jpa中findOne与getOne的区别 getOne没数据 findOne有数据

    项目中用到了spring-data-jpa,今天在写一个update方法的时候报了个空指针,看了看是因为一个对象中的关联没有取出来,我用的是getOne取得这个对象,加断点看以一下这个对象是个hibe ...

  2. CentOS 7安装SSHFS 实现远程主机目录 挂载为本地目录

    安装sshfs 官方下载地址 https://github.com/libfuse/sshfs/releases 首先,我们需要安装sshfs软件.sshfs是一个基于SSH文件传输协议的文件系统客户 ...

  3. [Nginx] Configuration for SPA

    server { listen ; listen [::]:; default_type application/octet-stream; gzip on; gzip_comp_level ; gz ...

  4. 【SQL 代码】SQL复制数据表及表结构

    select * into 目标表名 from 源表名 from 源表名 以上两句都是将'源表'的数据插入到'目标表',但两句又有区别的: 第一句(select into from)要求目标表不存在, ...

  5. 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache

    开篇介绍 先简单的演示一下使用 Lookup 组件实现一个简单示例 - 从数据源表 A 中导出数据到目标数据表 B,如果 A 数据在 B 中不存在就插入新数据到B,如果存在就更新B 和 A 表数据保持 ...

  6. EF6 DbModelBuilder

    protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Produc ...

  7. 免费网络视频监控软件cmsclient

    http://www.brickcom.com/products/DetailView.php?modelname=CMS-Client&series=CMS#product-support ...

  8. Emacs 设置C++代码风格

    ;; C++代码风格设置 (defconst cobbcpp '("linux" ; this is inheritance from the linux style (c-bas ...

  9. CentOS 7 配置HTTPS加密访问SVN

    上一篇文章已经介绍了如何在CentOS7环境下安装SVN并整合HTTP访问 http://www.cnblogs.com/fjping0606/p/7581093.html 那么本文则介绍如何添加HT ...

  10. mysql分享二-防止sql注入

    一:pdo 提供给预处理语句的参数不需要用引号括起来,驱动程序会自动处理.如果应用程序只使用预处理语句,可以确保不会发生SQL 注入.(然而,如果查询的其他部分是由未转义的输入来构建的,则仍存在 SQ ...