一直对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="测试静态图片"/>
测试结果
这次配置完成