利用Nginx实现动静分离和负载均衡

来源:互联网 发布:网络综艺节目的特点 编辑:程序博客网 时间:2024/06/08 20:09

利用Nginx实现动静分离和负载均衡

V1.0 By 李乐,杨

  版本修改历史

 

版本

修改内容

修改人

日期

1.0

创建文档

李乐,杨

2010-04-03

 

写此文的目的:4月3、4日在家闲着,于是一起整理资料。

 

1、Nginx介绍

   Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。Igor 将源代码以类BSD许可证的形式发布。自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx。 

 

2、为什么使用Nginx

   Nginx 是一个高性能Web和反向代理服务器, 它具有有很多非常优越的特性(主要是基于Linux系统阐述的): 

在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢Nginx为我们选择了 epoll and kqueue 作为开发模型. 

Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多. 

作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器), Last.fm 描述了成功并且美妙的使用经验. 

Nginx 是一个 [#installation 安装] 非常的简单 , 配置文件 非常简洁(还能够支持perl语法), Bugs 非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够 不间断服务的情况下进行软件版本的升级 。

以上都是官方的一些说法,看看网上的一些意见:“4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。我曾经就有两台Apache服务器,因为在配置文件中设置的MaxClients为4000,当Apache并发连接数达到3800时,导致服务器内存和Swap空间用满而崩溃。而这台 Nginx 0.5.31 + PHP 5.2.4 (FastCGI) 服务器在3万并发连接下,开启的10个Nginx进程消耗100M内存(20MB*10=100M),开启的250个php-cgi进程消耗1G内存(4MB*250≈1GB),加上系统自身消耗的内存,总共才消耗2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才100M。在开启25个php-cgi进程的情况下,每分钟的处理能力只比开启250个php-cgi进程时低了不到一半。

 

3、Nginx的安装

   基于李,杨家用的1台主机,操作系统是Win2003版本的,进行安装配置。

    Windows的安装比较简单,直接到http://wiki.nginx.org/NginxInstall下载需要的压缩包,解压到相应目录(假如是C:/nginx),点击目录下面的nginx.exe即可启动。

 

4、动静分离和负载均衡的准备工作

Host配置:

   127.0.0.1 yangli.com

服务器:win2003  1台

Web容器:Tomcat 6(8888端口)、Resin(8080端口)

              Tomcat和resin都部署相同应用,getUsers.jsp作为测试页面。

反向代理服务器:Nginx-0.8.34.zip

                    静态目录路径:e:/home/htmlfile/getUsers.html

项目部署:普通web项目,例如:example

Ø Resin-3.0.26配置:

       <host id="yangli.com" root-directory=".">

       <web-app id="/" document-directory="E:/example/webapp"/>

       </host>

Ø Apache-tomcat-6.0.26 配置文件:

        D:/apache-tomcat-6.0.26/webapps/examples

        修改:D:/apache-tomcat-6.0.26/conf/server.xml

        增加:

<Host name="yangli.com"  appBase="D:/apache-tomcat-6.0.26/webapps/examples"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">

  <Context path="" docBase="D:/apache-tomcat-6.0.26/webapps/examples">

          </Context>

  </Host>

主要是为了解决访问tomcat服务器的时候,

不需要http://yangli.com:8888/examples/getUser.jsp

可以直接访问:http://yangli.com:8888/getUser.jsp

具体说明,可以上网搜搜。

实现原理图:

 

 配置说明

 

 

配置原理图

 

5、动静分离

假设后端只有一台web服务器,配置如下:

upstream yangli.com {

   server 127.0.0.1:8888;

   #tomcat

}

 

server {

        listen       2010;

        server_name  yangli.com;

        access_log  off;

        location / {

            root   e:/home/htmlfile;            

            index index.html index.htm;         

            if (!-f $request_filename) {

    rewrite ^/([a-zA-Z]+).html   /$1.jsp last;

                proxy_pass http://yangli.com;

                break;

            }

        }

}

注明:如果是静态文件将定位到:e:/home/htmlfile;  目录

      如果e:/home/htmlfile不存在该文件,则请求到后端服务器:

      这里使用了rewrite规则rewrite ^/([a-zA-Z]+).html   /$1.jsp last; 

      if (!-f $request_filename) {

    rewrite ^/([a-zA-Z]+).html   /$1.jsp last;

                proxy_pass http://yangli.com;

                break;

            }

 

当我们请求:

 

静态页面测试

 

 

 

此时:访问的是E:/home/htmlfile/2010.html

home目录

 

 

 

 

 

 

 

当我们访问:

tomcat动态页面测试

 

根据rewrite规则,实际请求到了:127.0.0.1:8888上的tomcat进行处理,这样子就实现了动静分离,而对于用户来说,感觉只是仅仅访问了html页面。

同样测试Resin,也是成功的。

 

6、负载均衡

  

1. Nginx 负载均衡基础知识

nginx的upstream目前支持4种方式的分配

1)、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2)、weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

2)、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

3)、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。 

4)、url_hash(第三方)

在需要使用负载均衡的server中增加

proxy_pass http://yangli.com;

 

每个设备的状态设置为:

a)        down 表示单前的server暂时不参与负载

b)        weight 默认为1.weight越大,负载的权重就越大。

c)        max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

d)        fail_timeout:max_fails次失败后,暂停的时间。

e)        backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

 

 修改配置如下:

    upstream yangli.com {

       server 127.0.0.1:8888;

       #tomcat

       server 127.0.0.1:8080 backup;

       #resin

    }

 

下面来测试一下:

tomcat动态页面测试

 

实际上访问了:

 

tomcat8888页面

由于:resin设为backup,那么当tomcat宕机了,nginx会将请求发送到resin服务器,此时resin接管了tomcat,为外界提供服务。

 

测试如下:

1、关闭tomcat服务器

执行:D:/apache-tomcat-6.0.26/bin/shutdown.bat

tomcat关闭

表明tomcat已经被关闭

 

2、访问http://yangli.com:2010/getUsers.html

 

 resingetUsers.html页面

请求到resin服务器上了。

 

3、启动tomcat服务器:

D:/apache-tomcat-6.0.26/bin/startup.bat

tomcat启动页面

tomcat8888动态页面

页面访问正常

4、访问http://yangli.com:2010/getUsers.html

tomcat的getUsers.html页面

由于tomcat工作正常,于是又接管,作为主服务器进行工作。

 

7、总结

   本文主要阐述了利用Nginx实现动静分离和负载均衡,其中后端服务器使用了Resin和Tomcat,旨在表明Nginx并不关心后端服务器类型,只要后端服务器部署了相同的应用,访问正常即可。

 

 

最后附上nginx配置:

     upstream yangli.com {
           server 127.0.0.1:8888;
           server 127.0.0.1:8080 backup;
       }


server {
        listen       2010;
        server_name  yangli.com;
        access_log  off;

        location / {
            root   e:/home/htmlfile;            
            index index.html index.htm;          
            if (!-f $request_filename) {
                rewrite ^/([a-zA-Z]+).html   /$1.jsp last;
                proxy_pass http://yangli.com;
                break;
            }
        }

    }

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 眼睛里拉出白丝怎么办 脚扭了脚面肿了怎么办 伪音唱歌嗓子疼怎么办 小孩吊水手肿了怎么办 棉质地的裙子起褶子怎么办 孕妇吃了马苋菜怎么办 三非黑人抓住了怎么办 33岁了写字好丑怎么办 裤子熨焦了发亮怎么办 黑裤子熨亮了怎么办 。P手机没有钤声怎么办 处处被小人其欠负怎么办??? 衣服开了一个口怎么办 脸上长痘痘留下的坑怎么办 脸部被打得皮肤怎么办 打脸引起耳朵疼怎么办 被打了耳痛耳鸣怎么办 苹果6视频锁屏怎么办 抠耳朵抠疼了怎么办 图库的相片没了怎么办 遇到打假牌的人怎么办 部队保障卡丢了怎么办 廊坊武警学院取消现役学员怎么办 孩子去当兵联系不上怎么办 军训戴眼镜晒痕怎么办 想进部队体检没过怎么办 大腿跟小腿不直怎么办 腿被车门夹了怎么办 脚出汗穿凉鞋滑怎么办 玩游戏手出汗屏幕滑怎么办 新买的鞋子臭怎么办 当公民利益受到侵犯怎么办 唇钉里面长肉怎么办 宝宝舔了一口酒怎么办 头被玻璃门撞了怎么办 30多了还一事无成 未来怎么办 27岁失业了该怎么办 无业证明不给开怎么办 典型的缺乏运动的肥胖怎么办 30岁了不想结婚怎么办 专家解释欠30万怎么办