windows下配置Nginx+memcached+tomcat实现负载均衡以及动静资源分离

一直对Nginx这部分比较感兴趣,但是苦于一直没时间做这些实验,终于在这两天抽出一点时间来做上面的实验,特地将配置记录下来,免得以后忘记。

先给大家看下我所用到的一些东西

Nginx目录下是两个tomcat,作为两个Servlet容器

下载资源目录

1:memcached-1.2.1-win32   Memcached 是一个高性能的分布式内存对象缓存系统,在此处作为session共享的缓存     http://download.csdn.net/detail/aa427/7708127

2:nginx-1.5.8   nginx-1.5.8作为反向代理服务器以及负载均衡服务器

3:两个Tomcat

4:Jar  session共享必须要的包  http://download.csdn.net/detail/aa427/7708115


第一步:配置tomcat

下载tomcat  然后copy一份,把这两个tomcat放在一个目录下  分别取名tomcat1和tomcat2

进入tomcat2的server.xml  修改端口  免得启动冲突



至此负载均衡部分的tomcat部分配置好了


第二步:配置Nginx

在“#gzip  on”之后加上这些

upstream localhost {  
      #ip_hash;   
      server localhost:8080;  
      server localhost:8088;  
     }

将location / {  }中的配置换为

proxy_connect_timeout   3;  
            proxy_send_timeout      30;  
            proxy_read_timeout      30;  
            proxy_pass http://localhost;  
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size 10m;
            client_body_buffer_size 128k;
            proxy_buffer_size 4k;
            proxy_buffers 4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;


至此Nginx作为负载均衡服务器以及反响代理服务器的配置搞定  


第三步:在两个tomcat下面把你的项目发不上去  然后跑起  我的项目名为Example   然后首页是index.jsp     在tomcat1和tomcat下分别在index.jsp输出“这是tomcat1”和“这是tomcat2”

第四步:在浏览器输入http://localhost:80/Example   在网页上将会随机的输出“这是tomcat1”和“这是tomcat2”,试着关闭一个tomcat1,网页上会一直输出tomcat2,这表明Nginx作为代理和负载成功了。

第五步:接下来我们要配置实现session同步了  我采用了目前比较大众的方案memcached

第六步:下载memcached-1.2.1-win32  然后解压

第七步:首先在tomcat的lib下  加入下面这些包(两个tomcat都要加)

然后在context.xml中加如下面这些配置(两个tomcat都要配)

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"    
                memcachedNodes="n1:localhost:11211"    
                requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"    
                sessionBackupAsync="false"    
                sessionBackupTimeout="100"    
                transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"    
                copyCollectionsForSerialization="false"/> 

第八步:在两个tomcat下的Example项目中吧index.jsp换成这个

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
    <%  
    String path = request.getContextPath();  
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    %>  
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
      <head>  
        <base href="<%=basePath%>">    
        <title>My JSP 'session.jsp' starting page</title>  
        <meta http-equiv="pragma" content="no-cache">  
        <meta http-equiv="cache-control" content="no-cache">  
        <meta http-equiv="expires" content="0">      
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="This is my page">  
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->  
      </head>  
      <body>  
        <%  
         System.out.println(session.getId());  
         out.println("<br> This is (TOMCAT1|TOMCAT2), SESSION ID:" + session.getId()+"<br>");  
        %> 
      </body>  
    </html> 
第九步:然后开启Nginx   开启

服务 

再跑起两个tomcat(必须先开启memcached服务,不然tomcat会报错的)

第十步:访问http://localhost:80/Example  

输出结果是

这访问的是不同的tomcat  但是sessionId是一样的   表明实现了session同步


第十一步:接下来要做的是实现Nginx对动静资源访问的分离,Nginx对图片等资源de处理比tomcat快很多,所以我希望类似img让nginx服务器处理,而jsp和.do的访问请求在tomcat处理


第十二步:废话不多  直接上配置

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {  
            root E:/Nginx/;       //作为img的存在位置    
            expires  3d;
   }

我的位置是这样的
        
   location ~ (\.jsp)|(\.do)$ {
            proxy_connect_timeout   3;  
            proxy_send_timeout      30;  
            proxy_read_timeout      30;  
            proxy_pass http://localhost;  
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size 10m;
            client_body_buffer_size 128k;
            proxy_buffer_size 4k;
            proxy_buffers 4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
        } 
第十三步:修改Example的index.jsp   在加上图片的访问

<image src="http://localhost:80/1.jpg" alt="测试静态图片"/>

测试结果

这次配置完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值