nginx反向代理导致session失效的问题解决

102 阅读1分钟

背景:因为反向代理改变了访问接口路径,导致了session失效,找不到对应的session

location /dev/ {
  proxy_pass http://192.168.40.159:8081/dev/; #无问题的配置
 }
 
 location /dev {
  proxy_pass http://192.168.40.159:8081/dev; #无问题的配置
 }

location /dev-test/ {
  proxy_pass http://192.168.40.202:8080/dev/; #有问题的配置  session会失效
}

原因分析:

1、当浏览器第一次打开页面时,服务端会为这次会话创建一个session,并将session id通过response的header传递给浏览器
2、浏览器接收到响应后,如果header Set-Cookie 中path的值与浏览器地址路径匹配,则将该header值存于浏览器的Cookie中
3、当请求地址的路径 与 `Set-Cookie`的 `Path` 不匹配,所以浏览器并不会将其值存入Cookie中。
4、此时再次请求服务器时,服务器无法对应session,因此会当作第一次请求,创建一个新的sessin。
5、所以此时的session会失效,丢失

解决办法:

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

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