使用 proxy_cookie_path 可精准修改后端 Cookie 的 Path 值以匹配用户访问路径,仅影响 Set-Cookie 中的 Path 字段;需置于 location 块内 proxy_pass 下方,支持精确匹配和正则替换;同时须配合 proxy_redirect、rewrite 和 proxy_set_header 等指令统一路径体系。

直接用 proxy_cookie_path 把后端返回的 Cookie Path 改成和用户实际访问路径一致,就能让浏览器正确发送 Cookie。它不改 Domain、Secure 或 HttpOnly,只动 Set-Cookie 响应头里的 Path=xxx 这一段。
匹配源路径再替换目标路径
指令格式是 proxy_cookie_path 源路径 目标路径;,其中“源路径”必须和后端 Set-Cookie 中的 Path 值完全一致(包括末尾斜杠):
- 后端返回
Path=/api/v1/,用户访问的是/app/→ 写proxy_cookie_path /api/v1/ /app/; - 后端返回
Path=/,你想限制 Cookie 只在/admin/下生效 → 写proxy_cookie_path / /admin/; - 后端返回
Path=/project/,Nginx 暴露路径为/cms/→ 写proxy_cookie_path /project/ /cms/;
用正则做动态映射
当后端路径带版本号、前缀多变或需提取片段时,用正则更灵活。开头加 ~ 表示启用正则匹配,可用 引用捕获组:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 把
Path=/v1/user→/app/user:proxy_cookie_path ~^/v1/(.*)$ /app/$1; - 统一去掉所有
/v2/、/v3/等版本前缀:proxy_cookie_path ~^/v\d+/(.*)$ /$1; - 忽略大小写把
/USER/abc转为/user/abc:proxy_cookie_path ~*^/USER/(.*)$ /user/$1;
必须放在对的位置才生效
这个指令不会在 server 块顶层起作用,也不能随便塞在任意 location 里:
- 必须写在
location块内,且紧接在proxy_pass的下一行 - 不能写在
proxy_pass前面,也不能跨 location 复用 - 如果
proxy_pass http://backend/;(结尾有斜杠),后端通常返回Path=/;若写成proxy_pass http://backend;(无斜杠),后端可能返回Path=/app/,要按实际情况调整源路径
单改 Cookie 路径还不够
只修正 Path 不足以保证登录态全程可用,后端返回的跳转地址、API 链接、资源路径也得同步对齐:
- 用
proxy_redirect /api/ /app/;重写响应头中的 Location(比如 302 登录跳转) - 用
rewrite ^/app/(.*)$ /api/$1 break;把客户端请求路径映射到后端真实路径 - 加
proxy_set_header X-Forwarded-Prefix /app/;,方便后端生成正确的静态资源链接或 API 地址

















