免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
nginx反向代理導(dǎo)致session失效的問題解決
這篇文章主要介紹了nginx反向代理導(dǎo)致session失效的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
一同事求援:后臺(tái)系統(tǒng)的登錄成功了,但不能成功登進(jìn)系統(tǒng),仍然跳轉(zhuǎn)到登錄頁,但同一套代碼另一個(gè)環(huán)境卻沒有問題。
背景
經(jīng)了解,他對(duì)同一個(gè)項(xiàng)目使用tomcat部署了兩個(gè)環(huán)境,一個(gè)在開發(fā)服務(wù)器上,一個(gè)在他本機(jī),兩個(gè)環(huán)境代碼配置完全相同。兩邊通過同一個(gè)nginx進(jìn)行反向代理,nginx配置大致如下,
1
2
3
4
5
6
7
location /health/ {
proxy_pass http://192.168.40.159:8081/health/; #無問題的配置
}
location /health-dev/ {
proxy_pass http://192.168.40.202:8080/health/; #有問題的配置
}
一個(gè)反向代理到開發(fā)環(huán)境,一個(gè)反向代理到本機(jī)服務(wù)。
定位
既然代碼配置完全相同,那么問題很大可能就出現(xiàn)在nginx的反向代理上。
因?yàn)閮蛇卨ocation路徑不同(即瀏覽器路徑不同),但是反向代理的服務(wù)端路徑卻相同,結(jié)合session的基本原理,如下圖,
當(dāng)瀏覽器第一次打開頁面時(shí),服務(wù)端會(huì)為這次會(huì)話創(chuàng)建一個(gè)session,并將session id通過response的header傳遞給瀏覽器,header一般為 Set-Cookie: JSESSIONID=xxxxx; Path=xxxx
瀏覽器接收到響應(yīng)后,如果header Set-Cookie 中path的值與瀏覽器地址路徑匹配,則將該header值存于瀏覽器的Cookie中
瀏覽器在下次請(qǐng)求服務(wù)器時(shí),將Cookie中的JSESSIONID值通過request的header上報(bào)給服務(wù)端,header一般為 Cookie: JSESSIONID=xxxx;
服務(wù)端可通過該JSESSIONID來定位到對(duì)應(yīng)的session
nginx反向代理按這種方式配置時(shí)
1
2
3
location /health-dev/ {
proxy_pass http://192.168.40.202:8080/health/;
}
瀏覽器訪問 http://www.domian.com/health-dev 時(shí),服務(wù)端返回的 Set-Cookie 的 Path 值為 /health (因?yàn)橹虚g有反向代理,服務(wù)端并不知道代理前的路徑是啥,是按最終請(qǐng)求服務(wù)端的路徑設(shè)置),如圖
因?yàn)闉g覽器訪問地址的路徑 /health-dev 與 Set-Cookie 的 Path /health 不匹配,所以瀏覽器并不會(huì)將其值存入Cookie中,如圖
因此在下次請(qǐng)求服務(wù)器時(shí),瀏覽器無法設(shè)置request Cookie header的 JSESSIONID 值,服務(wù)器無法定位到對(duì)應(yīng)的session,因此會(huì)將其當(dāng)做第一次請(qǐng)求,創(chuàng)建一個(gè)新的session,如此反復(fù),因此就算你登錄認(rèn)證通過了,但服務(wù)器返回的登錄憑證(JSESSIONID)瀏覽器不會(huì)保存,并在下次請(qǐng)求時(shí)攜帶,導(dǎo)致服務(wù)器認(rèn)為你是一個(gè)新的請(qǐng)求,當(dāng)然就會(huì)又跳到登錄頁面了。
解決文獻(xiàn):http://www.cncsto.com/article/1503
nginx有一個(gè)命令 proxy_cookie_path (參考: proxy_cookie_path )可將服務(wù)器返回的 Set-Cookie 中的path進(jìn)行修改,格式為 proxy_cookie_path 原路徑 目標(biāo)路徑 ,我們?cè)谂渲弥刑砑?nbsp;proxy_cookie_path 如下。
1
2
3
4
location /health-dev/ {
proxy_pass http://192.168.40.202:8080/health/;
proxy_cookie_path /health /health-dev;
}
重啟nginx,問題解決。
到此這篇關(guān)于nginx反向代理導(dǎo)致session失效的問題解決的文章就介紹到這了
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Nginx resin session問題解決
前后端分離項(xiàng)目的跨域及保持Session會(huì)話
Session的生命周期
app 與服務(wù)器交互 token
關(guān)閉瀏覽器后再次訪問session 保證是同一個(gè)sessionid
session功能實(shí)現(xiàn)原理
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服