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	(查看端口号)
    

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

  • 关闭server1的tomcat服务。

      [root@server1 logs]# cd ../bin/
      [root@server1 bin]# ./shutdown.sh 
    

测试页面会轮询到server2的tomcat 服务上。
nginx+tomcat:Session共享_第3张图片
server2的日志只记录server2上传的信息,没有之前server1上传的信息。
nginx+tomcat:Session共享_第4张图片
[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 

server2:

[root@server2 lib]# cd /usr/local/tomcat/conf/
[root@server2 conf]# vim context.xml  

	 34 
  • 再次访问网页测试

nginx+tomcat:Session共享_第5张图片
server2服务端关闭

[root@server2 logs]# cd /usr/local/tomcat/bin/
[root@server2 bin]# ./shutdown.sh 

转换到server1上。
nginx+tomcat:Session共享_第6张图片
我们可以在server2的日志上查看到sever1上传的用户信息。
在这里插入图片描述


  • 网页的代码

      [root@server1 ~]# cat test.jsp 
      	<%@ page contentType="text/html; charset=GBK" %>
      	<%@ page import="java.util.*" %>
      	Cluster App Test
      	
      	Server Info:
      	<%
      	out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"
    ");%> <% out.println("
    ID " + session.getId()+"
    "); String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.print("Session list"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"
    "); System.out.println( name + " = " + value); } %>
    name:
    key:

你可能感兴趣的:(linux,运维)