1. 程式人生 > >Nginx + Tomcat7 + redis session一致性問題

Nginx + Tomcat7 + redis session一致性問題

        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 下的應用 。