由于现在的网站架构越来越大,基于互联网的用户也是日渐增长,所以传统的单机版服务器已经渐渐不能适应时代发展的需要。最近在和其他企业接触的过程中,发现对于互联网的经验尤为看重,所谓的互联网经验,其实就是指对于高并发,大数据量的处理能力。说到高并发这块,那么负载均衡是肯定不能少的。下面我将会在自己的机器上通过搭建一套单机版的负载均衡实现,来描述这个过程。

安装Nginx

首先,我们从官网http://nginx.org/download/nginx-1.9.9.zip中下载最新版本,然后解压到文件夹中,我这里为了方便,路径我就定为:E:\nginx。解压之后,在CMD窗口中,我们通过以下命令来开启Nginx服务:

start nginx       --开启nginx
nginx -s stop     --关闭nginx
nginx -s reload   --修改配置文件后,重新加载nginx

需要特别注意的是,如果先运行了 nginx –s stop命令后,再运行nginx –s reload命令,会抛出错误信息的,所以在任何时候运行stop命令后,都要再运行以下 start nginx命令,然后再进行其他命令操作。

启动nginx服务之后,我们就可以在任务管理器中看到有两个进程存在:

然后我们可以通过在浏览器中打开 http://127.0.0.1访问地址,就可以看到nginx成功访问的信息了。这就表示我们的nginx安装正常,正确。

配置Nginx

接下来,我们就开始通过实例来演示如何进行单机负载均衡的。

首先,我们打开VS2013,创建两个WebApplication,名称分别为WebApplication1,WebApplication2. 这两个WebApplication的正文部分会有不同的标志信息用来表示当前访问的页面是属于二者中的哪一个的。

然后,我们发布网站,打开IIS,分别创建两个网站实例,然后进行指向,绑定地址分别设置为: 127.0.0.1:8100 和 127.0.0.1:8200

最后,我们进入nginx安装目录,打开conf文件夹下的nginx.conf文件,进行如下的配置:

1.添加一个upstream节点,用于标记数据库集群:

  upstream  test.var{
        server    127.0.0.1:8100 weight=1;
        server    127.0.0.1:8200 weight=1;
    } 

2.在server节点下,修改location节点,访问方式:

        #对aspx后缀的进行负载均衡请求
        location / {  

          root   /wwwroot;#定义服务器的默认网站根目录位置
          index index.aspx index.html index.htm;#定义首页索引文件的名称  

          proxy_pass  http://test.var;
          proxy_redirect default;
          proxy_set_header X-Real-IP $remote_addr;

       }

这样配置之后,基本就完成了,我附上所有的配置:

#user  nobody;
worker_processes  1;

#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  test.var{
        server    127.0.0.1:8100 weight=1;
        server    127.0.0.1:8200 weight=1;
    }   

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location / {
        #    root   html;
        #    index  default.aspx index.html index.htm;
        #}

        #对aspx后缀的进行负载均衡请求
        location / {  

          root   /wwwroot;      #定义服务器的默认网站根目录位置
          index index.aspx index.html index.htm;   #定义首页索引文件的名称  

          proxy_pass  http://test.var;
          proxy_redirect default;
          proxy_set_header X-Real-IP $remote_addr;

       }  

        #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;
    #    }
    #}

}

访问测试

上面配置完毕之后,我们就可以通过访问 127.0.0.1 来访问了:

我们可以看到,第一次访问的时候,我们访问的是WebApplication2,然后我们刷新页面:

刷新页面之后,我们看到,访问的是WebApplication1.

这样,当不同用户来访问我们的服务器的时候,由于nginx的负载均衡,使得不同用户访问的服务器是不同的,这也从一定程度上大大缓解了服务器的压力。

接下来,我会讲解对静态资源的缓存,session共享等等,敬请期待。

参考资源

【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

Nginx负载均衡实践之一:基本实现的更多相关文章

  1. Nginx 负载均衡和反向代理实践

    nginx 以哪个配置文件启动 Nginx 负载均衡和反向代理实践 环境介绍 192.168.1.50    在这台主机上配置Nginx 的反向代理,负载均衡,和web1,web1使用的81号端口 1 ...

  2. 搞懂分布式技术9:Nginx负载均衡原理与实践

    搞懂分布式技术9:Nginx负载均衡原理与实践 本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容, ...

  3. Nginx负载均衡 后端服务器怎么共享Session 问题

    Nginx负载均衡 Nginx负载均衡一些基础知识: nginx 的 upstream目前支持 4 种方式的分配 1).轮询(默认)       每个请求按时间顺序逐一分配到不同的后端服务器,如果后端 ...

  4. Nginx负载均衡深入浅出

    nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后端服务器做负载均 ...

  5. Nginx负载均衡介绍

    Nginx真心牛逼 nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式 ...

  6. nginx负载均衡 - session失效

    最近迷上了Nginx,真实麻雀虽小,五脏俱全..功能实在强大.. nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以 ...

  7. 利用Docker快速创建Nginx负载均衡节点

    本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.Self-Host Kestrel 1. 在vs2017中新建dotnet core2. ...

  8. Nginx负载均衡配置简单配置方法

    http://www.jb51.net/article/121235.htm Nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至不同的Web服务器.下面通过 ...

  9. 使用Docker快速创建.Net Core2.0 Nginx负载均衡节点

    本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.Self-Host Kestrel 1. 在vs2017中新建dotnet core2. ...

随机推荐

  1. 【GOF23设计模式】单例模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_单例模式.应用场景.饿汉式.懒汉式 1.GOF23设计模式  2.单例模式  3.饿汉式  1 package com.t ...

  2. jQuery用户数字评分效果

    效果预览:http://hovertree.com/texiao/jquery/5.htm HTML文件代码: <!DOCTYPE html> <html xmlns="h ...

  3. CSS3D效果

    效果如本博客中右边呢个浅色框框,来自webpack首页(IE绕路0_0) github地址:http://wjf444128852.github.io/demo02/css3/css3d/ 思路: 1 ...

  4. Objective-C 快速入门--基础(四)

    1.什么是Block? ① 块语法,本质上是匿名函数(没有名称的函数): ② Block是OC中的一种数据类型,在iOS开发中被广泛使用: ③ ^是Block的特有标记: ④ Block的实现代码包含 ...

  5. React Native常用组件Image使用

    前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...

  6. IOS开发基础知识--碎片11

    1:AFNetwork判断网络状态 #import “AFNetworkActivityIndicatorManager.h" - (BOOL)application:(UIApplicat ...

  7. Android Studio 运行出现 Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.

    转载请标明出处: http://www.cnblogs.com/why168888/p/5978381.html 本文出自:[Edwin博客园] 我引用compile 'com.squareup.re ...

  8. RecyclerView-------MyAdapter代码

    package com.example.administrator.recyclerview; import android.content.Context; import android.suppo ...

  9. 通过jconsole监控tomcat JVM 内存、线程、CPU

    从Java 5开始 引入了 JConsole,来监控 Java 应用程序性能和跟踪 Java 中的代码.jconsole是JDK自带监控工具,只需要找到 JDK 安装路径,打开 bin 文件夹,双击  ...

  10. Microsoft SQL Server 2005 Service fails to start

    今天碰到一雷死人的事情,在Windows Server 2012 R2上安装SQL SERVER 2005标准版过程中一直遇到"The SQL Server service failed t ...