您的位置:首页 > 数据库 > Memcache

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

2014-08-02 21:42 507 查看
一直对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="测试静态图片"/>

测试结果

这次配置完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: