配置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. Css学习(2)

    1 标签分类(显示方式) 块元素 典型代表,Div,h1-h6,p,ul,li 特点: ★独占一行 ★可以设置宽高 ★ 嵌套(包含)下,子块元素宽度(没有定义情况下)和父块元素宽度默认一致. 行内元素 ...

  2. 用juniversalchardet解决爬虫乱码问题

    爬虫往往会遇到乱码问题.最简单的方法是根据http的响应信息来获取编码信息.但如果对方网站的响应信息不包含编码信息或编码信息错误,那么爬虫取下来的信息就很可能是乱码. 好的解决办法是直接根据页面内容来 ...

  3. Jsp九大内置对象和4大作用域

    一.在java开发中,jsp提供了9个内置的对象,这些内置对象将由容器为用户进行实例化,用户直接使用. 这9个内置对象分别为:pageContext,request,response,session, ...

  4. MySQL也真是让人郁闷(关于子查询中使用limit)

    在MySQL4.1中子查询是不能使用LIMIT的,手册中也明确指明 “This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY ...

  5. JSP:注册&登录

    数据库:Mysql 除了_id自动增长,其余全是varchar 注册:register.jsp <%@ page language="java" import="j ...

  6. Linux性能及调优指南1.2之Linux内存架构

    本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.2节的翻译原文地址:http://www.redbooks.ibm.com/redpap ...

  7. Docker使用札记 - Dockerfile指令

    ARG ARG跟ENV都可以定义变量,不同在于ARG在构建期结束时是销毁,而ENV定义的是系统中的环境变量,不会在构建结束时销毁,在以后的构建中直接使用. 当ARG和ENV定义相同名称的变量时,ENV ...

  8. [java] 屏蔽ie浏览器中F1帮助

    实现某一功能时需要屏蔽IE浏览器中的F1,F2快捷键. 百度后发现如下代码 var jq$ = jQuery.noConflict(); //防止$符号与其他的冲突 jq$(document).rea ...

  9. angularjs探秘<二>表达式、指令、数据绑定

    距离第一篇笔记好久了,抽空把angular的笔记梳理梳理. ng-init:初始化指令,这里可以声明变量,且变量不用指定数据类型(类似js中的var用法). 数值变量与字符串相加默认做字符串拼接运算. ...

  10. tornado-5.1版本

    server.py python server.py执行 import tornado.ioloop import tornado.options import tornado.web from to ...