-
了解Session
Session是一个数据块,是用来维系状态的一种技术,是用来存储用户名、密码,但是它把这些状态信息存储服务端上,安全性比cookie更高,cookie与session功能类似,但它将用户信息存放在浏览器上,不够安全。因此我们常用的记住密码功能就是使用session。 -
实验环境
server1:172.25.55.1
server2:172.25.55.2
jdk 和tomcat的安装的配置
-
将测试页代码复制到指定目录
[root@server1 ~]# ls nginx-1.10.1.tar.gz test.jsp (测试网页的代码,文末赋其代码) nginx-sticky-module-ng.tar.gz [root@server1 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/ [root@server1 ~]# scp test.jsp [email protected]:/usr/local/tomcat/webapps/ROOT/
-
解压、 编译、安装Nginx
[root@server1 ~]# tar zxf nginx-1.10.1.tar.gz [root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz [root@server1 nginx-1.10.0]# vim src/core/nginx.h 14 #define NGINX_VER "nginx/" (去掉nginx版本,防止被攻击) [root@server1 nginx-1.10.1]# vim auto/cc/gcc 171 # debug 172 #CFLAGS="$CFLAGS -g"(注释debug日志,否则占用内存太多) [root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx/ --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-sticky-module-ng [root@server1 nginx-1.10.1]# make && make install
-
编辑Nginx配置文件
[root@server1 sbin]# cd /usr/local/lnmp/nginx/conf/ [root@server1 conf]# vim nginx.conf 17 http { 18 upstream tomcat { 19 sticky; 20 server 172.25.55.1:8080; 21 server 172.25.55.2:8080; 22 } 23 include mime.types; 24 default_type application/octet-stream; 71 location ~ \.jsp$ { 72 proxy_pass http://tomcat; 73 }
-
打开服务
[root@server1 nginx]# pwd /usr/local/lnmp/nginx [root@server1 nginx]# cd sbin/ [root@server1 sbin]# ./nginx -t(语法检测) [root@server1 sbin]# ./nginx [root@server1 sbin]# netstat -tnlp (查看端口号)
- 去网页测试:
此时server1上的tomcat的日志可以查看到记录。但server2上没有此记录。
-
关闭server1的tomcat服务。
[root@server1 logs]# cd ../bin/ [root@server1 bin]# ./shutdown.sh
测试页面会轮询到server2的tomcat 服务上。
server2的日志只记录server2上传的信息,没有之前server1上传的信息。
[root@server1 logs]# > catalina.out (为方便查看日志,此命令可清空日志)
- Session共享
要用到的jar包:
[kiosk@foundation55 mulu]$ ls
asm-3.2.jar minlog-1.2.jar
kryo-1.04.jar msm-kryo-serializer-1.6.3.jar
kryo-serializers-0.10.jar nginx+tomcat+memcached.pdf
memcached-session-manager-1.6.3.jar reflectasm-1.01.jar
spymemcached-2.7.3.jar memcached-session-manager-tc7-1.6.3.ja
将找到的jar包传到server1和server2此目录:/usr/local/tomcat/lib
server1:
[root@server1 conf]# pwd
/usr/local/tomcat/conf
[root@server1 conf]# vim context.xml
34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
35 memcachedNodes="n1:172.25.55.1:11211,n2:172.25.55.2:11211"
36 failoverNodes="n1"
37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFac tory"
39 />
server2:
[root@server2 lib]# cd /usr/local/tomcat/conf/
[root@server2 conf]# vim context.xml
34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
35 memcachedNodes="n1:172.25.28.1:11211,n2:172.25.28.2:11211"
36 failoverNodes="n2"(server2是n2)
37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFac tory"
39 />
- 再次访问网页测试
server2服务端关闭
[root@server2 logs]# cd /usr/local/tomcat/bin/
[root@server2 bin]# ./shutdown.sh
转换到server1上。
我们可以在server2的日志上查看到sever1上传的用户信息。
-
网页的代码
[root@server1 ~]# cat test.jsp <%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.util.*" %> <html><head><title>Cluster App Test</title></head> <body> Server Info: <% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<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>"); 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="test.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>