日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一同事求援:后臺系統(tǒng)的登錄成功了,但不能成功登進(jìn)系統(tǒng),仍然跳轉(zhuǎn)到登錄頁,但同一套代碼另一個(gè)環(huán)境卻沒有問題。

背景

經(jīng)了解,他對同一個(gè)項(xiàng)目使用Tomcat部署了兩個(gè)環(huán)境,一個(gè)在開發(fā)服務(wù)器上,一個(gè)在他本機(jī),兩個(gè)環(huán)境代碼配置完全相同。兩邊通過同一個(gè)Nginx進(jìn)行反向代理,nginx配置大致如下,

location /health/ {
    proxy_pass  http://192.168.40.159:8081/health/;  #無問題的配置
 }

location /health-dev/ {
    proxy_pass  http://192.168.40.202:8080/health/;  #有問題的配置
}復(fù)制代碼

一個(gè)反向代理到開發(fā)環(huán)境,一個(gè)反向代理到本機(jī)服務(wù)。

定位

既然代碼配置完全相同,那么問題很大可能就出現(xiàn)在nginx的反向代理上。

因?yàn)閮蛇卨ocation路徑不同(即瀏覽器路徑不同),但是反向代理的服務(wù)端路徑卻相同,結(jié)合session的基本原理,如下圖,

nginx反向代理導(dǎo)致session失效的問題處理

 

  1. 當(dāng)瀏覽器第一次打開頁面時(shí),服務(wù)端會為這次會話創(chuàng)建一個(gè)session,并將session id通過response的header傳遞給瀏覽器,header一般為 Set-Cookie: JSESSIONID=xxxxx; Path=xxxx
  2. 瀏覽器接收到響應(yīng)后,如果header Set-Cookie 中path的值與瀏覽器地址路徑匹配,則將該header值存于瀏覽器的Cookie中
  3. 瀏覽器在下次請求服務(wù)器時(shí),將Cookie中的JSESSIONID值通過request的header上報(bào)給服務(wù)端,header一般為 Cookie: JSESSIONID=xxxx;
  4. 服務(wù)端可通過該JSESSIONID來定位到對應(yīng)的session

nginx反向代理按這種方式配置時(shí)

location /health-dev/ {
    proxy_pass  http://192.168.40.202:8080/health/;
}復(fù)制代碼

瀏覽器訪問 http://www.domian.com/health-dev 時(shí),服務(wù)端返回的 Set-Cookie 的 Path 值為 /health(因?yàn)橹虚g有反向代理,服務(wù)端并不知道代理前的路徑是啥,是按最終請求服務(wù)端的路徑設(shè)置),如圖

nginx反向代理導(dǎo)致session失效的問題處理

 

因?yàn)闉g覽器訪問地址的路徑 /health-dev 與 Set-Cookie 的 Path /health 不匹配,所以瀏覽器并不會將其值存入Cookie中,如圖

nginx反向代理導(dǎo)致session失效的問題處理

 

因此在下次請求服務(wù)器時(shí),瀏覽器無法設(shè)置request Cookie header的 JSESSIONID 值,服務(wù)器無法定位到對應(yīng)的session,因此會將其當(dāng)做第一次請求,創(chuàng)建一個(gè)新的session,如此反復(fù),因此就算你登錄認(rèn)證通過了,但服務(wù)器返回的登錄憑證(JSESSIONID)瀏覽器不會保存,并在下次請求時(shí)攜帶,導(dǎo)致服務(wù)器認(rèn)為你是一個(gè)新的請求,當(dāng)然就會又跳到登錄頁面了。

解決

nginx有一個(gè)命令 proxy_cookie_path(參考: proxy_cookie_path)可將服務(wù)器返回的 Set-Cookie 中的path進(jìn)行修改,格式為 proxy_cookie_path 原路徑 目標(biāo)路徑,我們在配置中添加 proxy_cookie_path 如下。

location /health-dev/ {
    proxy_pass  http://192.168.40.202:8080/health/;
    proxy_cookie_path  /health /health-dev;
}復(fù)制代碼

重啟nginx,問題解決。


[轉(zhuǎn)載請注明出處]

作者:雨歌 歡迎關(guān)注作者公眾號:半路雨歌,查看更多技術(shù)干貨文章

分享到:
標(biāo)簽:代理 nginx
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定