proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass_request_headers on;
# 应用侧
# Set-Cookie: sid=xxx; Path=/; Domain=.example.com; Secure

经过反向代理后登录成功但刷新就退出,直连后端则正常。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,Cookie 的域或路径与前端访问地址不一致,浏览器不回传;也可能是代理改写了响应头。

「Nginx 代理 Cookie 丢失」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

处理上按这个顺序:确认 Set-Cookie 的域与路径;代理层不要过滤 Cookie 头;统一前后端域名与协议。

改完只确认一件事:登录后刷新页面仍保持登录状态,多标签页表现一致。

作者 9823189