nginx+tomcat:Session共享

  • 了解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>
    

猜你喜欢

转载自blog.csdn.net/weixin_43328213/article/details/87885896