• 了解Session
    Session是一个数据块,是用来维系状态的一种技术,是用来存储用户名、密码,但是它把这些状态信息存储服务端上,安全性比cookie更高,cookie与session功能类似,但它将用户信息存放在浏览器上,不够安全。因此我们常用的记住密码功能就是使用session。

  • 实验环境
    server1:172.25.55.1
    server2:172.25.55.2
    jdk 和tomcat的安装的配置



  • 解压、 编译、安装Nginx

      [[email protected] ~]# tar zxf nginx-1.10.1.tar.gz 
      [[email protected] ~]# tar zxf nginx-sticky-module-ng.tar.gz 
      	
      [[email protected] nginx-1.10.0]# vim src/core/nginx.h	
        14 #define NGINX_VER          "nginx/" (去掉nginx版本,防止被攻击)	
      [[email protected] nginx-1.10.1]# vim auto/cc/gcc
      	171 # debug
      	172 #CFLAGS="$CFLAGS -g"(注释debug日志,否则占用内存太多)
      [[email protected] 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
      [[email protected] nginx-1.10.1]# make && make install
    

  • 编辑Nginx配置文件

      [[email protected] sbin]# cd /usr/local/lnmp/nginx/conf/
      [[email protected] 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         }
    


  • 去网页测试:
    nginx+tomcat:Session共享
    此时server1上的tomcat的日志可以查看到记录。但server2上没有此记录。
    nginx+tomcat:Session共享

测试页面会轮询到server2的tomcat 服务上。
nginx+tomcat:Session共享
server2的日志只记录server2上传的信息,没有之前server1上传的信息。
nginx+tomcat:Session共享
[[email protected] logs]# > catalina.out (为方便查看日志,此命令可清空日志)


  • Session共享

要用到的jar包:

[[email protected] 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:

[[email protected] conf]# pwd
/usr/local/tomcat/conf
[[email protected] 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:

[[email protected] lib]# cd /usr/local/tomcat/conf/
[[email protected] 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 />
  • 再次访问网页测试

nginx+tomcat:Session共享
server2服务端关闭

[[email protected] logs]# cd /usr/local/tomcat/bin/
[[email protected] bin]# ./shutdown.sh 

转换到server1上。
nginx+tomcat:Session共享
我们可以在server2的日志上查看到sever1上传的用户信息。
nginx+tomcat:Session共享


  • 网页的代码

      [[email protected] ~]# 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>
    

相关文章:

  • 2022-12-23
  • 2021-06-11
  • 2021-08-30
  • 2021-12-10
  • 2021-07-03
  • 2021-08-20
猜你喜欢
  • 2021-10-12
  • 2021-07-13
  • 2021-09-22
  • 2022-12-23
  • 2021-05-28
  • 2021-07-05
相关资源
相似解决方案