nginx反向代理導致session失效的問題解決_nginx

來源:腳本之家  責任編輯:小易  

給你2種解決方案.默認情況(php自帶的文件實現)這種情況.需要設置sess 文件存儲位置是個網絡位置.例如 設置2號機器的sess存儲目錄為 1號機器的sess存儲目錄,(需要掛載實現)這樣的話,就保證了多臺機器讀取寫入的是同一個sess文件.使用mysql,memcache,mongodb,redis 等 實現.這個稍微麻煩些.需要寫實現代碼.然后用php內置的函數(session_set_save_handler)注冊擴展還可以用自己的方式單獨實現.(這個更麻煩些,可以參考下一些開源系統的實現)www.anxorj.tw防采集請勿采集本網。

一同事求援:后臺系統的登錄成功了,但不能成功登進系統,仍然跳轉到登錄頁,但同一套代碼另一個環境卻沒有問題。

背景

經了解,他對同一個項目使用tomcat部署了兩個環境,一個在開發服務器上,一個在他本機,兩個環境代碼配置完全相同。兩邊通過同一個nginx進行反向代理,nginx配置大致如下,

location /health/ { proxy_pass http://192.168.40.159:8081/health/; #無問題的配置 }location /health-dev/ { proxy_pass http://192.168.40.202:8080/health/; #有問題的配置}

一個反向代理到開發環境,一個反向代理到本機服務。

定位

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

因為兩邊location路徑不同(即瀏覽器路徑不同),但是反向代理的服務端路徑卻相同,結合session的基本原理,如下圖,

    當瀏覽器第一次打開頁面時,服務端會為這次會話創建一個session,并將session id通過response的header傳遞給瀏覽器,header一般為 Set-Cookie: JSESSIONID=xxxxx; Path=xxxx 瀏覽器接收到響應后,如果header Set-Cookie 中path的值與瀏覽器地址路徑匹配,則將該header值存于瀏覽器的Cookie中 瀏覽器在下次請求服務器時,將Cookie中的JSESSIONID值通過request的header上報給服務端,header一般為 Cookie: JSESSIONID=xxxx; 服務端可通過該JSESSIONID來定位到對應的session

nginx反向代理按這種方式配置時

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

瀏覽器訪問 http://www.domian.com/health-dev 時,服務端返回的 Set-Cookie 的 Path 值為 /health (因為中間有反向代理,服務端并不知道代理前的路徑是啥,是按最終請求服務端的路徑設置),如圖

因為瀏覽器訪問地址的路徑 /health-devSet-Cookie 的 Path /health 不匹配,所以瀏覽器并不會將其值存入Cookie中,如圖

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

解決

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

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

重啟nginx,問題解決。

到此這篇關于nginx反向代理導致session失效的問題解決的文章就介紹到這了,更多相關nginx反向代理導致session失效內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

HTTP / 1.1 403年被禁止的服務器:nginx / 1.4.1日期:2013年8月32313133353236313431303231363533e59b9ee7ad943133333262666413日星期二,05:35:51 GMTcontent - type:text / html;charset = utf - 8傳輸編碼:分塊連接:關閉x驅動:PHP / 5 4 13設置cookie:SESS4d53248a9b2f82875a69aabd66665d85 = lbq1usdgh6l7qlqn76vvo375s1;期滿=(05 - 9月- 2013 09:09:11 GMT;路徑;.resellerclub.com domain = = /設置cookie:rclub_location = CN =結婚,到期,14 - 8月- 2013 05:35:51 GMT設置cookie:rclub_site = CN =結婚,到期,14 - 8月- 2013 05:35:51 GMT地點:http://china.resellerclub.com/admin/upfile.asp過期:太陽,1978年11月19 05:00:00 GMT最后修改:星期二,2013年8月13日05:35:51 GMTcache - control:no - cache,則存儲,必須重新驗證cache - control:post檢查= 0,提前預支= 0內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • nginx session丟失問題處理解決方法
  • nginx session共享問題解決方案解析
  • 詳解nginx反向代理實現會話(session)保持的兩種方式
  • nginx+redis實現session共享
  • nginx+tomcat實現負載均衡,使用redis session共享
  • nginx中共享session會話配置方法例子
  • nginx 負載均衡 多站點共享session
  • 詳解nginx反向代理websocket響應403的解決辦法
  • nginx緩存cache的配置方案以及相關內存占用問題解決
  • centos7編譯安裝nginx的方法步驟
  • 簡介使用nginx plus的在線活動監控功能的方法
  • 加速nginx性能: 開啟gzip和緩存
  • nginx+fastdfs搭建圖片服務器的方法實現
  • nginx下支持path_info的方法實例詳解
  • nginx的安裝和多域名配置的實現方法
  • 反向代理緩存的詳細介紹
  • nginx修改配置限制惡意爬蟲頻率
  • 下面這些是什么意思?
  • php兩臺機器如何session同步
  • iis 在運行php 時出現您所查找的頁面無法顯示,因為使用了無效的方法(HTTP 動作)進行訪問。
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全星外虛擬主機華眾虛擬主機linuxwin服務器ftp服務器dns服務器tomcat nginxzabbix云和虛擬化服務器其它首頁服務器nginx session丟失問題處理解決方法nginx session共享問題解決方案解析詳解nginx反向代理實現會話(session)保持的兩種方式nginx+redis實現session共享nginx+tomcat實現負載均衡,使用redis session共享nginx中共享session會話配置方法例子nginx 負載均衡 多站點共享session詳解nginx反向代理websocket響應403的解決辦法nginx緩存cache的配置方案以及相關內存占用問題解決centos7編譯安裝nginx的方法步驟簡介使用nginx plus的在線活動監控功能的方法加速nginx性能: 開啟gzip和緩存nginx+fastdfs搭建圖片服務器的方法實現nginx下支持path_info的方法實例詳解nginx的安裝和多域名配置的實現方法反向代理緩存的詳細介紹nginx修改配置限制惡意爬蟲頻率nginx提示:500 internal servernginx 多站點配置方法集合權限問題導致nginx 403 forbiddenginx fastcgi錯誤primary scripnginx服務器的反向代理proxy_pasnginx 403 forbidden的解決辦法nginx偽靜態配置和常用rewrite偽nginx下301重定向域名的方法小結詳解nginx服務器中配置超時時間的windows下nginx+php5的安裝與配置分析nginx日志并屏蔽采集者ip(nginx屏蔽一句簡單命令重啟nginxwindows下nginx + php5 的安裝與配置方法nginx+ssl實現雙向認證的示例代碼nginx下支持path_info的方法實例詳解nginx防止直接用ip訪問web服務器的設置方詳解nginx服務器的配置中開啟文件gzip壓縮nginx服務器中使用gzip壓縮的相關配置解析nginx下讓wordpress支持固定鏈接的偽靜態nginx服務器中的重定向配置參考指南
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载