Nginx 作负载均衡时,由于是每次都需要把请求分发到不同的机器,同一个用户在一台机器上创建了 session,下一次的请求很有可能会转发到另外一台机器,会造成 session 丢失。我们可以使用 Redis 来保存 session。具体步骤如下:
1. https://files.cnblogs.com/files/langfanyun/redislib.7z 下载解压后,把 jar 包都放在Tomcat 的 lib 目录下;
2. 编辑 Tomcat下的 conf/context.xml 文件,加入如下配置:
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.137.47"
port="6379"
database="0"
maxInactiveInterval="60" />
其中 host 为 Redis 的服务器地址。
3. 修改 Tomcat 下的 conf/server.xml 文件,在 <Engine>节点添加 jvmRoute 属性,不同机器上的Tomcat 设置不同的值:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
4. 修改 Tomcat 下的 webapps/ROOT/ 下的 index.jsp 文件,把<body>里的内容改成如下。不同机器上的此文件,添加一些不同的值,以区分不同的机器。
<body>
SessionID: <%=session.getId()%><br/>
SessionIP: <%=request.getServerName()%><br>
tomcat1
</body>
5. 启动 Redis 服务器和各个 Tomcat,访问时,多刷新几次,可以看到 sessionID 的值一样,但是其它内容不一样。说明实际上是访问了不同的 Tomcat 下的应用 。