Centos7下Nginx+Tomcat配置反向代理,使用redis解決session一致性問題
一、session一致性問題
使用集群方案解決網站高並發問題時,就會部署多臺應用服務器。當用戶第一次通過客戶端(如:瀏覽器)訪問服務器時,服務器會創建對應的session,
使用Nginx反向代理,假如用戶A第一次訪問站點,被反向代理到服務器一處理,服務器一創建對應sessionA記錄信息,用戶A再次訪問站點時,被反向代理到服務二處理,
而服務器二沒有記錄用戶A的session信息,就會新創建sessionB,導致用戶A之前操作丟失。
我們可以通過讓多個服務器統一到同一個地方新建session和取session,來解決session不一致的問題。
二、基於上篇搭建好Nginx+Tomcat環境信息,可以使用memcached解決session一致性問題
Linux下Nginx+Tomcat配置反向代理
三、Redis簡介
REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統。Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。
四、配置
1、安裝Redis,默認端口為6379
cd /usr/local/redis/ wget http://download.redis.io/releases/redis-4.0.8.tar.gz tar xzf redis-4.0.8.tar.gz cd redis-4.0.8 make
2、啟動,並且修改/usr/local/redis/redis-4.0.8/redis.conf 的bind值,改為本機ip
./redis-server --protected-mode no
3、上傳jar包到tomcat的lib目錄下,實現讓多個服務器統一到redis新建session和取session
jar包可以去github查看下載,地址:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
4、修改每一個tomcat配置信息
a、為了便於測試,修改/usr/local/tomcat/apache-tomcat-8.0.50/conf/server.xml文件,Engine節點添加jvmRoute="tomcat1"(103行左右,多個tomcat修改名字不同)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >
b、修改/usr/local/tomcat/apache-tomcat-8.0.50/conf/context.xml,實現tomcat到Memcached新建session和取session,在Context節點裏添加如下配置
memcachedNodes="redis://192.168.182.131:6379",這個ip需要是自己安裝的redis的ip
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="redis://192.168.182.131:6379" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" />
五、測試
瀏覽器訪問192.168.182.130,ctrl + F5刷新瀏覽器,查看session信息是否和預期一致。
六、tomcat和nginx安裝可以參考個人的隨筆
Linux環境下安裝Tomcat
CentOS7編譯安裝Nginx
yexiangyang
Centos7下Nginx+Tomcat配置反向代理,使用redis解決session一致性問題