java技術研究

          統計

          留言簿(3)

          閱讀排行榜

          評論排行榜

          Nginx:session與nginx_upstream_jvm_route(轉)

          轉自http://hanqunfeng.iteye.com/blog/1920994

          1)ip_hash(不推薦使用)

           nginx中的ip_hash技術能夠將某個ip的請求定向到同一臺后端,這樣一來這個ip下的某個客戶端和某個后端就能建立起穩固的session,ip_hash是在upstream配置中定義的: 

           

          Java代碼  收藏代碼
          1. upstream backend {   
          2.     server 127.0.0.1:8080 ;   
          3.     server 127.0.0.1:9090 ;   
          4.     ip_hash;   
          5.     }   

           不推薦使用的原因如下:

           

            1/ nginx不是最前端的服務器。

             ip_hash要求nginx一定是最前端的服務器,否則nginx得不到正確ip,就不能根據ip作hash。譬如使用的是squid為最前端,那么nginx取ip時只能得到squid的服務器ip地址,用這個地址來作分流是肯定錯亂的。 

              2/ nginx的后端還有其它方式的負載均衡。

             假如nginx后端又有其它負載均衡,將請求又通過另外的方式分流了,那么某個客戶端的請求肯定不能定位到同一臺session應用服務器上。

             3/ 多個外網出口。

              很多公司上網有多個出口,多個ip地址,用戶訪問互聯網時候自動切換ip。而且這種情況不在少數。使用 ip_hash 的話對這種情況的用戶無效,無法將某個用戶綁定在固定的tomcat上 。

           

          2)nginx_upstream_jvm_route(nginx擴展,推薦使用)

          nginx_upstream_jvm_route 是一個nginx的擴展模塊,用來實現基于 Cookie 的 Session Sticky 的功能。

          簡單來說,它是基于cookie中的JSESSIONID來決定將請求發送給后端的哪個server,nginx_upstream_jvm_route會在用戶第一次請求后端server時,將響應的server標識綁定到cookie中的JSESSIONID中,從而當用戶發起下一次請求時,nginx會根據JSESSIONID來決定由哪個后端server來處理。

           

          1/ nginx_upstream_jvm_route安裝

          下載地址(svn):http://nginx-upstream-jvm-route.googlecode.com/svn/trunk/

          假設nginx_upstream_jvm_route下載后的路徑為/usr/local/nginx_upstream_jvm_route,

          (1)進入nginx源碼路徑

          patch -p0 < /usr/local/nginx_upstream_jvm_route/jvm_route.patch

          (2)./configure  --with-http_stub_status_module --with-http_ssl_module --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre-8.33 --add-module=/usr/local/nginx_upstream_jvm_route

          (3)make & make install

          關于nginx的下載與安裝參考:http://hanqunfeng.iteye.com/blog/697696

           

          2/ nginx配置

          Java代碼  收藏代碼
          1. upstream  tomcats_jvm_route  
          2.         {  
          3.              # ip_hash;   
          4.               server   192.168.33.10:8090 srun_id=tomcat01;   
          5.               server   192.168.33.11:8090 srun_id=tomcat02;  
          6.               jvm_route $cookie_JSESSIONID|sessionid reverse;  
          7.         }  

           3/ tomcat配置

          修改192.168.33.10:8090tomcat的server.xml,

          Xml代碼  收藏代碼
          1. 將  
          2. <Engine name="Catalina" defaultHost="localhost" >  
          3. 修改為:  
          4. <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat01">  

           同理,在192.168.33.11:8090server.xml中增加jvmRoute="tomcat02"。

          4/ 測試

          啟動tomcat和nginx,訪問nginx代理,使用Google瀏覽器,F12,查看cookie中的JSESSIONID,

          形如:ABCD123456OIUH897SDFSDF.tomcat01 ,刷新也不會變化

          posted on 2014-03-28 11:39 小秦 閱讀(531) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 武清区| 海晏县| 张家界市| 双鸭山市| 白沙| 宁南县| 田林县| 清新县| 晴隆县| 九台市| 城口县| 琼结县| 比如县| 甘泉县| 涿州市| 石泉县| 芒康县| 阳春市| 寿宁县| 任丘市| 横山县| 监利县| 长汀县| 威宁| 富宁县| 始兴县| 故城县| 连州市| 南投县| 堆龙德庆县| 丹棱县| 界首市| 佛坪县| 邳州市| 武汉市| 噶尔县| 尼木县| 湄潭县| 满城县| 高邑县| 临猗县|