个人git: https://gitee.com/hhlhhl/NginxDemo/blob/master/README.md
方法一:tomcat-cluster-redis-session-manager解决session共享问题
版本: apache-tomcat-8.5、nginx-1.8、redis_3.2.1
实现:
1、下载: https://github.com/ran-jit/tomcat-cluster-redis-session-manager/wiki
jedis.jar
commons-pool2.jar
commons-logging.jar
tomcat-cluster-redis-session-manager-2.0.4.jar
2、解压之后。将jar包放入tomcat的lib中(注意是tomcat/lib中)
3、配置解压之后的redis-data-cache.properties(根据你的redis配置)。配置完将这个文件放入tomcat/conf文件夹中。
4、配置tomcat/conf/context.xml(中间加入),增加如下两行。
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager"
host="localhost"
port="6379"
database="0"
password="123456"
maxInactiveInterval="60"/>
测试:
1、nginx配置 nginx/conf/nginx.conf文件加入以下配置。
upstream myServer {
server 192.168.6.86:8887 weight=1;
server 192.168.6.86:8888 weight=1;
#server 192.168.6.34:8916 weight=1;
#server 192.168.6.34:2025 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
#这里的配置主要是为了解决端口问题
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#server_name_in_redirect on;
#port_in_redirect off;
proxy_pass http://myServer;
}
}
2、准备两个tomcat,一个端口为8887,一个为8888
3、两个tomcat中jsp代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%
request.getSession().setAttribute("name","hhl");
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
String date=simpleDateFormat.format(new Date());
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>tomcat8888</title>
</head>
<body>
SessionID:<%=session.getId()%>
<BR>
当前时间为:<%=date%>
<BR>
SessionPort:<%=request.getServerPort()%>
<BR>
name的值为:<%=session.getAttribute("name")%>
<BR>
<%
out.println("这是tomcat8888");
%>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
String date=simpleDateFormat.format(new Date());
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>tomcat8887</title>
</head>
<body>
SessionID:<%=session.getId()%>
<BR>
当前时间为:<%=date%>
<BR>
SessionPort:<%=request.getServerPort()%>
<BR>
name的值为:<%=session.getAttribute("name")%>
<BR>
<%
out.println("这是tomcat8887");
%>
</body>
</html>
4、启动两个tomcat和redis:如果不启动redis是会报错的。。。
结果: 访问 http://127.0.0.1/test/index.jsp