Nginx反向代理丟失cookie的問題


今天在測試環境進行測試時發現有個頁面無論如何都進不去了,經過調試發現,JSESSIONID的path和我訪問應用的工程不相同!我訪問的應用是/xxx/,而JSESSIONID的path是/yyy/,這就是問題的根源!

於是我就修改應用的sessionCookiePath,說白了就是在項目根路徑下的META-INF下新建一個context.xml文件,具體內容為:

在測試環境成功通過,即只要兩個path不一致,就會重現測試環境上的問題,懷着喜悅的心情上測試環境進行測試,結果居然還是不行,調試發現JSESSIONID的path還是原來的/yyy/,居然沒有起作用!

后來經過思考,修改tomcat是不行的,而應該修改nginx,即通過nginx修改JSESSIONID的路徑,實驗成功!下面是一些具體知識:

1. 如果只是host、端口轉換,則cookie不會丟失。

例如: location /project {

    proxy_pass http://127.0.0.1:8080/project;

  }

通過瀏覽器訪問http://127.0.0.1/project時,瀏覽器的cookie內有jsessionid。再次訪問時,瀏覽器會發送當前的cookie。

2. 如果路徑也變化了,則需要設置cookie的路徑轉換,nginx.conf的配置如下

location /proxy_path {

proxy_pass http://127.0.0.1:8080/project;

}

通過瀏覽器訪問http://127.0.0.1/proxy_path時,瀏覽器的cookie內沒有jsessionid。再次訪問時,后台當然無法獲取到cookie了。

加上路徑轉換:proxy_cookie_path /project /proxy_path; 則可以將project的cookie輸出到proxy_path上。

正確的配置是:

location /proxy_path {

proxy_pass http://127.0.0.1:8080/project;

proxy_cookie_path /project /proxy_path;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM