核心是确保浏览器Cookie Path与用户访问路径匹配,否则登录态丢失;需用proxy_cookie_path精准替换Path值,并配合proxy_redirect、rewrite和X-Forwarded-Prefix等指令统一路径。

核心是让浏览器看到的 Cookie Path 与用户当前访问路径匹配,否则它根本不会发送这个 Cookie —— 登录态就断了。
先搞清问题根源:为什么路径不匹配
后端应用按自己部署路径生成 Cookie 的 Path,比如:
- 它跑在 /api/v1/ 下,返回
Set-Cookie: token=abc; Path=/api/v1/ - 但用户实际访问的是 /app/login
- 浏览器发现
/api/v1/不是/app/的前缀,直接丢弃该 Cookie
用 proxy_cookie_path 做精准替换
它只改响应头里的 Path=xxx 部分,必须写在 location 块里、proxy_pass 后面:
- 后端设
Path=/api/v1/,前端暴露在/app/→ 写proxy_cookie_path /api/v1/ /app/; - 后端设
Path=/,你想限制只在/admin/下生效 → 写proxy_cookie_path / /admin/; - 后端路径带版本号如
/v2/user,想统一转成/user→ 写proxy_cookie_path ~^/v\d+/(.*)$ /$1;
斜杠和位置不能错
源路径和目标路径末尾斜杠要一致,否则可能部分匹配失败:
- ✅
proxy_cookie_path /api/ /app/;(都带尾部斜杠) - ❌
proxy_cookie_path /api /app(都不带,但易误判边界) - 指令必须紧接
proxy_pass下一行,不能放在server块顶层或别的location里
单改 Cookie 路径远远不够
后端返回的跳转地址、API 链接、静态资源路径也得同步对齐,否则仍会出错:
- 用
proxy_redirect /api/v1/ /app/;重写Location响应头 - 用
rewrite ^/app/(.*)$ /api/v1/$1 break;把客户端请求映射到后端真实路径 - 加
proxy_set_header X-Forwarded-Prefix /app/;透传上下文,方便后端生成正确链接











