用 Nginx 反向代理多臺服務器的時候,會出現 session 不同步的問題,如用戶在tomcat1中登錄,保存了用戶信息進 session 中,但是tomcat2中的 session 中沒有該用戶信息,如果用戶再次發出請求時分配到了 tomcat2 中,就會出現 找不到用戶 session信息,重新調整到登錄頁面的情況,所以,採用粘性session的方式,同一個IP的所有訪問請求都指定到同一個 tomcat中,這樣就解決了問題。因爲一個用戶的請求都會發送到同一臺服務器
步驟:
tomcat部分:
部署兩臺(或者多臺)tomcat,如果是同一臺電腦的話可以參考我的另一篇博客:https://blog.csdn.net/DGH2430284817/article/details/90417905
web項目部分:
把項目的war包放到每一個 tomcat 的 webapps 目錄下,這樣在 tomcat 啓動的時候,會自動解壓部署web項目
nginx部分:
修改conf目錄下的 nginx.conf 文件:
upstream tomcatServer{
#同一個ip訪問同一個服務器
ip_hash;
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;
}
}
最重要的就是 ip_hash 這個配置,這是nginx自帶的,可以實現同一個ip分配到同一個代理服務器
最後啓動nginx和tomcat就可以了,session的問題就解決了
注意:
在分佈式 session 的三種解決方法中,以上這種是最簡單的,而且資源消耗也是最小的,但是缺點就是其中一臺tomcat 崩潰後,裏面的 session 數據就全沒了,單點故障危險大。