nginx 反向代理(proxy_pass)cookie,session丟失問題
1、丟失原因
請求的接口地址經過反向代理后,所攜帶的 cookie 並沒有一同攜帶到反向代理的地址。因此就導致了 session 失效。
2、語法
語法: proxy_cookie_path path
replacement
; path
就是你要替換的路徑 replacement
就是要替換的值
3、可能出現場景
假設域名為(主域名情況):ibuzheng.com
- 只進行host、端口轉換,cookie 不會改變
## 場景一:代理的地址與項目同名(假設項目名為:itest,端口號為8081)
location /itest { ##注意此處,跟項目同名
proxy_pass http://127.0.0.1:8080/itest;
}
## 以上這種情況,因為反向地址依舊與項目同名,只是做了項目端口號轉向,因此 cookie 不會丟失
- 路徑改變,需要重新配置 cookie 執行路徑
## 場景二:代理的地址與項目不同
location /proxy_path { ##注意此處,跟項目不同名(proxy_path 代理地址)
proxy_pass http://localhost:8080/projectName;
proxy_cookie_path /projectName /proxy_path;
}
上述,proxy_cookie_path
的意思為:將原本發送給項目 /projectName
的重新指向發送給 proxy_path
假設域名為(子域名情況):ibuzheng.com/policy
## 場景:代理的地址與項目不同
location /businessSrver { ##注意此處,跟項目不同名(proxy_path 代理地址)
proxy_pass http://localhost:8080/projectName;
proxy_cookie_path /projectName /policy/businessSrver;
## proxy_cookie_path /projectName /businessSrver; ## 錯誤示范,這個無法獲取到 cookie 下面圖片地址
}
上述,proxy_cookie_path
的意思為:將原本發送給項目 /projectName
的重新指向發送給 /policy/businessSrver
;
ps:如果出現cookie還未攜帶發送的情況,可以打開F12,查看一下
cookies
發送失敗具體發送到哪里,是否與代理接口地址一致。
圖:1、為傳送失敗,2、為傳送成功