1、下载nginx,下载地址:http://nginx.org/
2、下载tomcat7
3、下载memcache
一、Nginx解压后,在conf包下找到:nginx.conf,并在同一目录下新增proxy.conf和gzip.conf
nginx.conf配置如下:
#Nginx所用用户和组,window下不指定
#user niumd niumd;
#工作的子进程数量(通常等于CPU数量或者2倍于CPU)
worker_processes 4;
#错误日志存放路径
error_log logs/error.log info;
#指定pid存放文件
pid logs/nginx.pid;
events {
#使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue,window下不指定。
#use epoll;
#允许最大连接数
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
access_log logs/access.log;
fastcgi_intercept_errors on;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#keepalive_timeout 75 20;
#keepalive_timeout 0;
include gzip.conf;
include proxy.conf;
upstream localhost {
#ip_hash;
server localhost:18081 weight=3;
server localhost:18080 weight=1;
}
server {
listen 80;
server_name localhost;
#自定义40X或者50X页面的时候需要开启 fastcgi_intercept_errors on;(上面已经开启)
error_page 404 http://127.0.0.1/404.html;
#定义网站首页
#root:定义网站首页存放地址
#index:定义网站首页名称
location / {
root D:/test;
index main.html;
}
#定义静态资源存放地址
location ~ \.(html|js|css|png|gif|jpg|jpeg|bmp)$ {
root D:/test;
}
#将jsp的请求转移到tomcat里面
location ~ \.(jsp)$ {
proxy_connect_timeout 3;
proxy_send_timeout 30;
proxy_read_timeout 30;
proxy_pass http://localhost;
}
}
}
gzip.conf配置如下:
gzip on;
gzip_min_length 1000;
gzip_types text/plain text/css application/javascript application/x-javascript;
proxy.conf配置如下:
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_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
至此,nginx配置成功!
双击nginx.exe启动nginx,在浏览器中输入:http://127.0.0.1会显示nginx.conf中配置的
location / {
root D:/test;
index main.html;
}
main.html页面。目前,已经将静态文件分离!
二、
tomcat
我使用的是tomcat7.X;将tomcat拷贝2份,分别将tomcat的端口改变。如果不在同一台机子上则不用更改。以下列出更改的地方:
Conf\server.xml:
A: <Server port="18005" shutdown="SHUTDOWN">
B: <Connector port="18080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEcoding="UTF-8"/>
C: <Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />
D: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
jvmRoute="tomcat1"是做Session共享的时候使用的。
同理,配置tomcat2!
由于上面的Nginx.conf已经添加了两台tomcat所以,现在启动Nginx和tomcat 访问127.0.0.1/[your project]/index.jsp 即能看出Nginx负载均衡,将请求分发到不同的tomcat中。
三、nginx+tomcat7+memcache事项session共享
依赖包:
couchbase-client-1.2.3.jar
javolution-5.5.1.jar
memcached-session-manager-1.6.5.jar
memcached-session-manager-tc7-1.6.5.jar
msm-flexjson-serializer-1.6.5.jar
msm-javolution-serializer-1.6.5.jar
msm-kryo-serializer-1.6.5.jar
msm-xstream-serializer-1.6.5.jar
spymemcached-2.10.3.jar
放到tomcat目录下lib中即可。
配置tomcat,使其将session保存到memcache中:
方法一:在server.xml中配置。
找到host节点下的context节点,配置:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:127.0.0.1:11211" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" sessionBackupAsync="false" sessionBackupTimeout="3000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" copyCollectionsForSerialization="false" />
memcachedNodes="n1:127.0.0.1:11211"是配置的memcache节点地址,我配置在本机所以用127.0.0.1,可替换成memcache安装ip地址即可。
方法二:在context.xml中配置。
找到context节点,加入:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:127.0.0.1:11211" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" sessionBackupAsync="false" sessionBackupTimeout="3000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" copyCollectionsForSerialization="false" />
两种方法都可以。但是方法一如果在maven项目中,热部署是失败的。所以推荐方法二。
四、编写测试页面index.jsp
<%@ page contentType="text/html; charset=utf-8" %> <%@ page import="java.util.*" %> <html><head><title>Cluster App Test1</title></head> <body> Server Info: You are now on server II! <% out.println(request.getLocalAddr() + ":" + request.getLocalPort()); %> <br><br> <% out.println("<br> ID " + session.getId()+"<br>"); String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue") ; session.setAttribute(dataName, dataValue); } out.print("<b>Session list</b> <br>"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"<br>"); System.out.println( name + " = " + value); } %> <form action="index.jsp" method="POST"> name:<input type=text size=20 name="dataName"> <br> key:<input type=text size=20 name="dataValue"> <br> <input type=submit> </form> </body> </html>
五、测试
运行memcache nginx 2个tomcat,启动无误后,在页面访问:http://localhost/yourproject/index.jsp,根据页面提示操作后显示如下:

此时访问的是tomcat1,sessionid如图所示。
为方便让nginx+tomcat负载均衡容易显示,关掉tomcat1,再访问http://localhost/yourproject/index.jsp,显示如下:

由上两张图可以看到,访问的是tomcat2服务器,但是sessionid是一直的,我们传递的值也是一致的。至此,tomcat+ngnix+memcache负载均衡和session共享完成!
浙公网安备 33010602011771号