nginx——session共享
1、Session共享

http 協(xié)議是無狀態(tài)的,即你連續(xù)訪問某個(gè)網(wǎng)頁 100 次和訪問 1 次對(duì)服務(wù)器來說是沒有 區(qū)別對(duì)待的,因?yàn)樗洸蛔∧恪D敲矗谝恍﹫?chǎng)合,確實(shí)需要服務(wù)器記住當(dāng)前用戶怎么辦? 比如用戶登錄郵箱后,接下來要收郵件、寫郵件,總不能每次操作都讓用戶輸入用戶名和密 碼吧,為了解決這個(gè)問題,Session 的方案就被提了出來,事實(shí)上它并不是什么新技術(shù), 而且也不能脫離 http 協(xié)議以及任何現(xiàn)有的 web 技術(shù)。
session 的常見實(shí)現(xiàn)形式是會(huì)話 cookie(session cookie),即未設(shè)置過期時(shí)間 的 cookie,這個(gè) cookie 的默認(rèn)生命周期為瀏覽器會(huì)話期間,只要關(guān)閉瀏覽器窗口, cookie 就消失了。實(shí)現(xiàn)機(jī)制是當(dāng)用戶發(fā)起一個(gè)請(qǐng)求的時(shí)候,服務(wù)器會(huì)檢查該請(qǐng)求中是否包 含 sessionid,如果未包含,則系統(tǒng)會(huì)創(chuàng)造一個(gè)名為 JSESSIONID 的輸出 cookie 返回 給瀏覽器(只放入內(nèi)存,并不存在硬盤中),并將其以 HashTable 的形式寫到服務(wù)器的內(nèi) 存里面;當(dāng)已經(jīng)包含 sessionid 是,服務(wù)端會(huì)檢查找到與該 session 相匹配的信息,如 果存在則直接使用該 sessionid,若不存在則重新生成新的 session。這里需要注意的 是 session 始終是有服務(wù)端創(chuàng)建的,并非瀏覽器自己生成的。 但是瀏覽器的 cookie 被 禁止后 session 就需要用 get 方法的 URL 重寫的機(jī)制或使用 POST 方法提交隱藏表單的 形式來實(shí)現(xiàn)。
首先我們應(yīng)該明白,為什么要實(shí)現(xiàn)共享,如果你的網(wǎng)站是存放在一個(gè)機(jī)器上,那么是不 存在這個(gè)問題的,因?yàn)闀?huì)話數(shù)據(jù)就在這臺(tái)機(jī)器,但是如果你使用了負(fù)載均衡把請(qǐng)求分發(fā)到不同的機(jī)器呢?這個(gè)時(shí)候會(huì)話 id 在客戶端是沒有問題的,但是如果用戶的兩次請(qǐng)求到了兩臺(tái) 不同的機(jī)器,而它的 session 數(shù)據(jù)可能存在其中一臺(tái)機(jī)器,這個(gè)時(shí)候就會(huì)出現(xiàn)取不到 session 數(shù)據(jù)的情況,于是 session 的共享就成了一個(gè)問題。
1.1、session 一致性解決方案
1.1.1、session 復(fù)制
tomcat 本身帶有復(fù)制 session 的功能。(基本不用)
1.1.2、共享 session
需要專門管理 session 的軟件, memcached 緩存服務(wù),可以和 tomcat 整合,幫助 tomcat 共享管理 session。
1.2、安裝memcached
1.2.1、 node2 和 node3 上安裝 jdk 和 tomcat
[root@node2 apps]# rpm -ivh jdk-7u80-linux-x64.rpm [root@node2 apps]# find / -name '*java*' #可以看出/usr/java/jdk1.7.0_80/ 配置環(huán)境變量 [root@node2 jdk1.7.0_80]# vim /etc/profile 加入以下兩行代碼: export JAVA_HOME=/usr/java/jdk1.7.0_80 export PATH=$PATH:$JAVA_HOME/bin 讓文件生效: [root@node2 apps]# source /etc/profile [root@node2 apps]# jps 13894 Jps #說明 jdk 安裝配置成功 解壓 apache-tomcat-7.0.69.tar.gz 修改 ROOT/index.jsp,dG 全刪后,添加: from 192.168.20.102 session=<%=session.getId()%> 另外一臺(tái) node3 同樣的安裝配置操作。 然后分別訪問 node2 和 node3 都可以正常,刷新 session 也不會(huì)變。 修改 nginx.conf upstream rss { server 192.168.20.102:8080; server 192.168.20.103:8080; } 訪問測(cè)試 http://www.sxthenhao.com/toms,刷新 session 一直改變。
1.2.2、nginx1 上安裝 memcached
1、安裝 libevent
yum install libevent -y
2、安裝 memcached
yum install memcached -y
3、啟動(dòng) memcached
memcached -d -m 128m -p 11211 -l 192.168.20.95 -u root -P /tmp/ -d:后臺(tái)啟動(dòng)服務(wù) -m:緩存大小 -p:端口 -l:IP -P:服務(wù)器啟動(dòng)后的系統(tǒng)進(jìn)程 ID,存儲(chǔ)的文件 -u:服務(wù)器啟動(dòng)是以哪個(gè)用戶名作為管理用戶
1.8.3 配置 session 共享(node2 和 node3)
1、拷貝 jar 到 tomcat 的 lib 下,jar 包見附件
2、配置 tomcat,每個(gè) tomcat 里面的 context.xml 中加入
tomcat 添加 jar 包和配置信息之后需要重啟
我是小白弟弟,一個(gè)在互聯(lián)網(wǎng)行業(yè)的小白,立志成為一名架構(gòu)師
https://blog.csdn.net/zhouhengzhe?t=1
Nginx
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。