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

安装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. 获取SqlServer存储过程定义的3种方法

    第一种: declare @p_text varchar(max) SELECT @p_text= text FROM syscomments WHERE id = ( SELECT id FROM ...

  2. HTML5树叶飘落动画

    查看效果:http://keleyi.com/keleyi/phtml/css3/15.htm 请使用Chrome浏览器查看本效果. html源代码: <!DOCTYPE HTML> &l ...

  3. 从 HTTP 到 HTTPS - IIS 部署免费 HTTPS

    这篇文章首发于我的个人网站:听说 - https://tasaid.com/,建议在我的个人网站阅读,拥有更好的阅读体验. 这篇文章与 博客园 和 Segmentfault 共享. 前端开发QQ群:3 ...

  4. sharepoint 提升权限报错

    现象: sharepoint中提升权限是为了模拟管理员操作,但是对于普通用户对item的更新和删除照成错误 解决办法: 去掉权限升级 说明: 升级权限能不用尽量不用,同时也不好排查权限问题.

  5. String类型传值以及对象传值

    package Virtual; class Stan{ String mm = "hello"; } class Virtual { public static void mai ...

  6. MVC3.0----整理之一

    1.ViewBag对象是动态解析对象 @{ ViewBag.Title = "Insert"; } 不仅可以把单个的对象绑定到 ViewBag上,还可以直接绑定List ViewB ...

  7. ORACLE 10g 数据库体系结构图

    ORACLE 10g 的数据库体系结构图(ORACLE 10g(Release 2)ARCHITECTURE),非常的全面.系统.高屋建瓴的整体介绍了ORACLE 10g 的数据库体系结构.如果能全面 ...

  8. Linux磁盘空间监控告警

    Linux系统中需要监控磁盘各分区的使用情况,避免由于各种突发情况,造成磁盘空间被消耗殆尽的情况,例如某个分区被Oracle的归档日志耗尽,导致后续的日志文件无法归档,这时ORACLE数据库就会出现错 ...

  9. .NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)

    阅读目录: 1.开篇介绍 2.使用委托消除函数串联调用 2.1.使用委托工厂转换两个独立层面的对象 3.多态入口(面向对象继承体系是可被扩展的) 4.多态的受保护方法的单元测试(Protected成员 ...

  10. MySQL 更新语句技巧

    一. 多表更新 1. 数据准备 mysql> mysql> select goods_id, goods_name,goods_cate from tdb_goods; +-------- ...