proxy_cookie_domain 是 Nginx 反向代理中修复 Cookie 域名不匹配的核心指令,通过动态重写 Set-Cookie 的 Domain 属性,使前端域名(如 a.com)能合法读写后端(如 b.com)设置的 Cookie,解决同源策略导致的登录态失效问题。

proxy_cookie_domain 是 Nginx 在反向代理场景下修复 Cookie 域名不匹配问题的核心指令。它不改变后端返回的原始 Set-Cookie,而是在响应发给浏览器前,动态重写其中的 Domain 属性,让前端域名能合法读写该 Cookie。
为什么需要 proxy_cookie_domain
当 Nginx 代理请求到后端服务(如 b.com)时,后端常设置:
Set-Cookie: sessionid=abc; Path=/; Domain=b.com
但前端页面运行在 a.com 下,浏览器会拒绝保存这个 Domain 不匹配的 Cookie —— 导致登录态无法维持、Session 失效。
proxy_cookie_domain 就是为了解决这种“同源策略拦截 Cookie”的典型问题,尤其适用于主域名不同但业务需共享登录态的跨域代理场景。
基本语法与常用写法
指令格式为:
proxy_cookie_domain upstream_domain replacement_domain;
- 把后端响应中所有 Domain=b.com 替换为 Domain=a.com:
proxy_cookie_domain b.com a.com; - 支持正则匹配,适配子域或带点前缀的情况:
proxy_cookie_domain ~\.?b\.com a.com; - 若后端未设 Domain 或设为 .b.com,也可强制补全或修正:
proxy_cookie_domain "" a.com; // 清空原 Domain 并设为 a.com
配合其他关键配置才能生效
单独用 proxy_cookie_domain 不足以让跨域 Cookie 正常工作,必须同步满足:
- 后端响应头包含 Access-Control-Allow-Origin(不能为 *),且值为前端确切域名(如 https://a.com)
- 后端响应头包含 Access-Control-Allow-Credentials: true
- 前端发起请求时启用凭据:fetch(..., { credentials: 'include' }) 或 xhr.withCredentials = true
- Cookie 自身需带 Secure(HTTPS 环境下必需)和 SameSite=None(Chrome 80+ 要求)
常见误用与注意事项
proxy_cookie_domain 只作用于响应头中的 Set-Cookie,不影响请求头里的 Cookie 发送;它也不处理 Path,路径不一致需额外配置 proxy_cookie_path。
- 指令必须放在 location 块内,且位于 proxy_pass 之后才生效
- 若 upstream 域名含端口(如 b.com:8080),需在正则中显式匹配端口,否则替换失败
- 多个 Set-Cookie 头会逐个处理,但不支持对单个 Cookie 的条件替换
- 在负载均衡 upstream 中使用时,确保各节点返回的 Domain 格式统一,避免替换逻辑混乱


















