配置nginx实现windows/iis应用负载均衡

 

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.htm

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

  1. 配置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. Redis 在线管理工具(phpRedisAdmin)介绍 两次git

    phpRedisAdmin is a simple web interface to manage Redis databases. phpRedisAdmin 在 Redis clients 的列表 ...

  2. 虚拟机挂载光盘,同时修改yum源为光盘挂载目录

    VMware下挂载光盘并安装文件https://blog.csdn.net/gfd54gd5f46/article/details/53968293 linux修改yum本地源的方法https://w ...

  3. C#列的一些操作

    //变更列名 DataTableA.Columns["原来的列名"].ColumnName="新的列名";

  4. Java - 35 Java 实例

    Java 实例 本章节我们将为大家介绍 Java 常用的实例,通过实例学习我们可以更快的掌握 Java 的应用. Java 环境设置实例 Java 实例 – 如何编译一个Java 文件? Java 实 ...

  5. android:windowSoftInputMode属性;界面关闭后软键盘不隐藏的解决方法;

    stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置 stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activit ...

  6. Codeforces Round #492 (Div. 2)

    A. /* 从大往小依次除 */ #include<cstdio> #include<algorithm> #include<cstring> #include&l ...

  7. fastclick.js解决移动端(ipad)点击事件反应慢问题

    参考http://blog.csdn.net/xjun0812/article/details/64919063 http://www.jianshu.com/p/16d3e4f9b2a9 问题的发现 ...

  8. linux:安装mysql管理工具phpmyadmin

    1.下载phpmyadmin,下载地址:http://www.phpmyadmin.net/ 2.解压到/var/www/html/phpmyadmin/ 3.修改配置 cd /var/www/htm ...

  9. QT编写TCP入门+简单的实际项目(附源程序)

    我个人感觉学习QT不需要那么深入的了解,因为我就是编写一下界面来实现理想的功能而已,我不是靠这个吃饭,当然以后要是从事这个方向那就好好深入底层好好学了. 学习QT的TCP:第一步:去百度看看TCP的介 ...

  10. Java中同步的几种实现方式

    1.使用synchronized关键字修饰类或者代码块: 2.使用Volatile关键字修饰变量: 3.在类中加入重入锁. 代码示例: 非同步状态下: public static void main( ...