人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

nginx反向代理導(dǎo)致session失效的問(wèn)題解決

發(fā)布日期:2022-02-03 17:46 | 文章來(lái)源:CSDN

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

背景

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

location /health/ {
  proxy_pass http://192.168.40.159:8081/health/; #無(wú)問(wèn)題的配置
 }
location /health-dev/ {
  proxy_pass http://192.168.40.202:8080/health/; #有問(wèn)題的配置
}

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

定位

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

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

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

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

location /health-dev/ {
  proxy_pass http://192.168.40.202:8080/health/;
}

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

因?yàn)闉g覽器訪(fǎng)問(wèn)地址的路徑 /health-devSet-Cookie 的 Path /health 不匹配,所以瀏覽器并不會(huì)將其值存入Cookie中,如圖

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

解決

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

location /health-dev/ {
  proxy_pass http://192.168.40.202:8080/health/;
  proxy_cookie_path /health /health-dev;
}

重啟nginx,問(wèn)題解決。

到此這篇關(guān)于nginx反向代理導(dǎo)致session失效的問(wèn)題解決的文章就介紹到這了,更多相關(guān)nginx反向代理導(dǎo)致session失效內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

美國(guó)服務(wù)器租用

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線(xiàn)路精選!

全天候客戶(hù)服務(wù)

7x24全年不間斷在線(xiàn)

專(zhuān)屬顧問(wèn)服務(wù)

1對(duì)1客戶(hù)咨詢(xún)顧問(wèn)

在線(xiàn)
客服

在線(xiàn)客服:7*24小時(shí)在線(xiàn)

客服
熱線(xiàn)

400-630-3752
7*24小時(shí)客服服務(wù)熱線(xiàn)

關(guān)注
微信

關(guān)注官方微信
頂部