`

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

    博客分类:
  • j2ee
 
阅读更多
版本修改历史
版本
修改内容
修改人
日期
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和反向代理服务器, 它具有有很多非常优越的特性:

 

 

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

 

 

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

 

 

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

 

 

l 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、动静分离和负载均衡的准备工作

 

 

l Host配置:

 

 

   127.0.0.1 yangli.com

 

 

l 服务器:win2003  1台

 

 

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

 

 

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

 

 

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

 

 

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

 

 

l 项目部署:普通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

 

 

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

 

 

l 实现原理图:

 

 

 

 

 

 

 

 

 

 

 

wps_clip_image1

 

 

配置原理图

 

 

 

 

 

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;

 

 

            }

 

 

 

 

 

当我们请求:

 

 

wps_clip_image2

 

 

 

 

 

 

 

 

 

 

 

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

 

 

wps_clip_image3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

当我们访问:

 

 

wps_clip_image4

 

 

 

 

 

根据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

 

 

    }

 

 

 

 

 

下面来测试一下:

 

 

wps_clip_image4

 

 

 

 

 

实际上访问了:

 

 

wps_clip_image5

 

 

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

 

 

 

 

 

测试如下:

 

 

1、关闭tomcat服务器

 

 

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

 

 

wps_clip_image6

 

 

表明tomcat已经被关闭

 

 

 

 

 

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

 

 

 

 

 

wps_clip_image7

 

 

请求到resin服务器上了。

 

 

 

 

 

3、启动tomcat服务器:

 

 

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

 

 

wps_clip_image8

 

 

wps_clip_image9

 

 

页面访问正常

 

 

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

 

 

wps_clip_image10

 

 

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

 

 

 

 

 

7、总结

 

 

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

 

 

 

 

 

本文出自 “lee” 博客,请务必保留此出处http://jooben.blog.51cto.com/253727/309280

分享到:
评论

相关推荐

    利用nginx实现动静分离和负载均衡 by 李乐,杨.doc

    【Nginx 介绍】 Nginx 是一款高性能的 HTTP 和...总结起来,利用 Nginx 实现动静分离和负载均衡,可以有效地优化网站性能,提高服务的可用性和可靠性。Nginx 的高性能和易用性使其成为现代 Web 架构中的重要组成部分。

    Nginx+Tomcat 动静分离实现负载均衡.rar

    这个“Nginx+Tomcat 动静分离实现负载均衡.rar”压缩包文件很可能是关于如何利用Nginx作为反向代理和负载均衡器,以及Tomcat作为Java应用服务器,来实现这两种技术的详细教程或指南。 首先,我们来理解一下“动静...

    nginx配置优化+负载均衡+动静分离详解

    通过以上配置,我们可以看到Nginx不仅提供了丰富的配置选项来优化其自身性能,还能够有效地实现负载均衡和动静分离等功能,从而显著提升整个系统的性能和稳定性。这对于构建高性能Web应用来说至关重要。

    Nginx++Keepalived+Tomcat负载均衡&动静分离

    本文主要介绍了Nginx、Keepalived和Tomcat的负载均衡和动静分离配置,旨在帮助读者了解如何搭建高可用、高性能的Web应用系统。 一、环境准备 在开始配置之前,需要准备好服务器、软件包和网络环境。服务器方面,...

    Nginx作为动静分离、缓存与负载均衡初探1

    本篇文章将探讨如何利用Nginx实现动静分离、缓存功能,并进行基础的负载均衡配置。 一、动静分离 动静分离是一种优化网站性能的技术,它将动态内容(如PHP、Java等后端处理请求)和静态内容(如HTML、CSS、...

    nginx配置优化+负载均衡+动静分离详解.zip_nginx_nginx 负载_优化_优化配置_负载均衡

    通过深入理解和实践这些Nginx的配置优化、负载均衡和动静分离技术,你可以构建一个高效、稳定且可扩展的Web服务环境,有效应对高并发访问,提升用户体验。"nginx配置优化+负载均衡+动静分离详解.txt"这个文件应该...

    Nginx+keepalived+tomcat实现性负载均衡(包含需要的包)

    在构建高性能、高可用性的Web服务时,使用Nginx+keepalived+tomcat的组合可以实现强大的负载均衡和故障转移功能。这个方案的核心思想是利用Nginx作为前端反向代理服务器,通过keepalived来确保服务的高可用性,并将...

    nginx+tomcat实现负载均衡

    在构建高性能、高可用性的Web服务时,"nginx+tomcat实现负载均衡"是一个常见的解决方案。...在"蚂蚁课堂-nginx+tomcat实现负载均衡"这样的课程中,你将深入学习如何设置和管理这样的环境,以及如何解决可能出现的问题。

    Arch-03-15- Nginx+tomcat 配置负载均衡动静分离

    标题“Arch-03-15- Nginx+tomcat 配置负载均衡动静分离”涉及的是在Web服务器架构中使用Nginx与Tomcat的集成,通过配置实现负载均衡和动静态资源分离。这样的架构可以提高系统的可用性和响应速度,减轻后端应用...

    【nginx】教学视频资源(负载均衡)

    【Nginx】教学视频资源主要涵盖了如何在Linux服务器上安装和配置Nginx,特别是其在负载均衡和动静分离方面的应用。以下是这些主题的详细解释: **Nginx** Nginx是一款高性能的Web服务器,同时也是一个反向代理、...

    linux下nginx+tomcat负载均衡配置

    在Linux环境下,构建一个高效的Web服务架构通常会结合Nginx和Tomcat,利用Nginx的反向代理和负载均衡能力,以及Tomcat对于Java应用的出色支持。本配置指南将详细介绍如何在Linux系统中设置Nginx与Tomcat的负载均衡...

    nginx 配置 , 动静分离 及项目部署

    在实际项目部署过程中,合理利用Nginx进行动静分离不仅可以有效提升网站性能,还能增强系统的稳定性和安全性。对于大型项目来说,合理配置Nginx进行负载均衡更是不可或缺的一环。希望本文能够帮助您更好地理解和运用...

    详解Ngigx+Tomcat配置动静分离,负载均衡

    总的来说,结合Nginx的动静分离和负载均衡功能,可以有效地优化Web服务架构,提升系统的稳定性和响应速度,同时降低单个服务器的压力,提高整体的可用性。对于大型网站或高并发场景,这种架构尤其重要。

    Location之正则匹配-Nginx入门到实践应用层负载均衡

    本篇文章将深入探讨`Location`指令的正则匹配功能,以及如何利用Nginx进行应用层负载均衡,从而实现高效、灵活的Web服务管理。 首先,我们要理解`Location`指令的基本用法。`Location`可以配合精确匹配、前缀匹配和...

    Debian下搭建Nginx和Tomcat服务器实现负载均衡的方案

    为了实现动静分离,Nginx需要配置负载均衡组,其中包含静态服务器组和动态服务器组。静态服务器组可以将静态内容请求分发到指定的服务器上,而动态服务器组则负责动态内容请求的转发。在配置负载均衡组时,可以为每...

    第九讲Nginx动静分离URL转发实战.pptx

    此内容将围绕“第九讲Nginx动静分离URL转发实战”这一主题展开,涉及Nginx的基本概念、配置方法以及如何通过Nginx进行有效的URL转发。 ### Nginx简介 Nginx是一款广泛使用的高性能HTTP服务器和反向代理服务器,以...

    部署Nginx+Apache动静分离的实例详解

    这样,既能利用Nginx的高性能静态文件处理能力,又能利用Apache的动态处理优势,提高了系统的响应速度和整体效率。 总结来说,动静分离是提高网站性能的有效手段,通过部署Nginx和Apache可以实现这一目标。Nginx的...

    Nginx教学_nginx_sleptlyb_

    本教学主要探讨了如何利用 Nginx 实现 HTTP 负载均衡和反向代理的配置与优化,提升系统的稳定性和响应速度。 **1. Nginx 服务器的安装与配置** 在第2章“Nginx服务器的安装与配置”中,我们学习了如何在不同的操作...

    动静分离

    通常,动静分离可以通过配置Web服务器(如Nginx)来实现,利用其反向代理和负载均衡功能,将静态文件请求直接返回给客户端,动态请求转发到后端应用服务器。 标签中提到了"源码"和"工具",这暗示我们可能会涉及到...

Global site tag (gtag.js) - Google Analytics