用 Nginx 反向代理多臺服務器的時候,會出現 session 不同步的問題,如用戶在tomcat1中登錄,保存了用戶信息進 session 中,但是tomcat2中的 session 中沒有該用戶信息,如果用戶再次發出請求時分配到了 tomcat2 中,就會出現 找不到用戶 session信息,重新調整到登錄頁面的情況,所以,採用redis 緩存數據庫來保存session 的方式,這樣就解決了問題。
步驟:
tomcat部分:
部署兩臺(或者多臺)tomcat,如果是同一臺電腦的話可以參考我的另一篇博客:https://blog.csdn.net/DGH2430284817/article/details/90417905
到每一個tomcat中的conf目錄下打開 context.xml ,添加配置,連接redis數據庫
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60"
/>
在每一個tomcat 的 lib目錄下,放入以下所需要的jar包:
commons-pool-1.5.4.jar
commons-pool2-2.0.jar
jedis-2.2.0.jar
tomcat-redis-session-manager-1.2-tomcat-7.jar (其他包都可以maven裏面找,這個比較不好找,點擊這裏下載)
tomcat-util.jar
web項目部分:
web項目中可以添加一個jsp頁面,用來查看不同的tomcat的session 是否相同(index2.jsp):
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body class="signin">
tomcat01 <br>
session:<%=session.getId()%>
</body>
</html>
把項目的war包放到每一個 tomcat 的 webapps 目錄下,這樣在 tomcat 啓動的時候,會自動解壓部署web項目
nginx部分:
修改conf目錄下的 nginx.conf 文件:
upstream tomcatServer{
server 127.0.0.1:8080;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcatServer/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
配置完成,先啓動redis數據庫 , 具體可以看另一篇博客 https://mp.csdn.net/postedit/87696552
再啓動 nginx 和 tomcat 跑起項目,然後不斷刷新 index2.jsp 頁面,看session信息是否相同。
我的訪問地址是http://127.0.0.1/medical-web-boss/index2.jsp,根據不同的項目名,
你們可自行修改http://127.0.0.1/項目名/index2.jsp
結果:
tomcat01
tomcat02
成功!!