Tomcat8+nginx+redis实现session共享配置
Nginx负载Tomcat服务
使用Nginx负载多个Tomcat服务,实现应用负载,满足应用系统性能需求;本次涉及工具如下(以下工具版本Nginx版本不做限制,其他工具版本未做测试无法保障,个人感觉下载对应的版本jar包应该都可以):Nginx1.16.1,Tomcat8.5,Redis3.2.100,redisson-all-3.24.3.jar,redisson-tomcat-8-3.24.3.jar。以上工具我这里只发一下最后两个jar包的下载地址: https://github.com/redisson/redisson/tree/master/redisson-tomcat,jar包版本包含Tomcat7、8、9和10,其他工具可以自行百度官网下载安装。
Nginx配置
配置文件根据系统的实际情况去配置,以下是我的nginx.conf配置文件,我只贴出关键部分(配置文件仅供参考,详细配置请百度参考其他文章,英文水平好的可以参考官网文档)
upstream tomcatserver{
server 127.0.0.1:8081;
server 127.0.0.1:8080;
}
server {
listen 5088 ssl;
server_name localhost;
ssl_certificate cert/*.crt; # 证书crt文件路径,可以是绝对路径,也可以是相对路径,注意路径中不能包含空格,
ssl_certificate_key cert/*.key; # 证书key文件路径
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
set $newscheme http;
if ($host = "www.test01.com"){
set $newscheme https;
}
location / {
proxy_pass http://tomcatserver;
proxy_redirect http:// $newscheme://;
proxy_set_header Host $host:8001;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $newscheme;
}
Redis配置
Redis配置文件,我这里介绍几个关键配置,想了解其他属性配置可以参考官方文档或其他文章介绍:
bind 127.0.0.1 #地址配置,远程访问可以配置0.0.0.0
port 6379 #服务端口
requirepass foobared #密码配置,注释掉,密码可以为空
Tomcat配置
Tomcat可以使用默认配置,也可以根据系统情况增加一些优化参数,这里不做详细赘述了,可自行百度查阅,需要注意端口不要冲突,否则会导致Tomcat服务无法启动,AJP的端口可以注释掉,另外两处端口可自行修改,不冲突即可。
Session共享配置
添加session共享配置,主要是修改tomcat服务的配置,修改的配置文件有两个,过程如下:
1.下载redisson-all-3.24.3.jar,redisson-tomcat-8-3.24.3.jar包,放在Tomcat的lib目录下
2.修改Tomcat目录下的conf/context.xml文件,在相同位置增加如下内容:
<ResourceLink name="bean/redisson"
global="bean/redisson"
type="org.redisson.api.RedissonClient" />
<Manager className="org.redisson.tomcat.JndiRedissonSessionManager"
readMode="REDIS"
jndiName="bean/redisson" />
3.修改Tomcat目录下conf/server.xml文件,在相同位置增加如下内容:
<Resource name="bean/redisson"
auth="Container"
factory="org.redisson.JndiRedissonFactory"
configPath="${catalina.base}/conf/redisson.yaml"
closeMethod="shutdown"/>
redisson.yaml文件内容如下,注意地址、端口、密码需要根据实际情况修改:
singleServerConfig:
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
#密码
password:
subscriptionsPerConnection: 5
clientName:
#地址端口
address: "redis://127.0.0.1:6379"
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
connectionMinimumIdleSize: 32
connectionPoolSize: 64
database: 0
dnsMonitoringInterval: 5000
4.session过期配置,该配置在项目的web.xml里面,30分钟过期,参考如下:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
效果展示
这里为了方便效果展示,我们增加两个jsp文件,jsp文件内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome to visit tomcat1</title>
</head>
<body>
<center><h1>Welcome to visit tomcat1</h1></center>
<center>
<h3>sessionId:</h3><%=session.getId()%>
<h3>session创建时间:</h3><%=session.getCreationTime()%>
<center>
</body>
</html>
启动服务后,效果如下: