Chrome 检查器中的 Cookie 在服务器上缺失

Chrome 检查器中的 Cookie 在服务器上缺失

我有一个由两个相继连接的 nginx 实例组成的设置。第一个在一台服务器上(A),第二个在另一台服务器上(B)

user <-> nginx (A) <-> nginx (B) <-> api frontend (B)
                                 <-> api backend (B)

服务器(A)受 SSL 保护,然后(B)使用将请求转发到服务器proxy_pass。这是来自 A 的配置:

location / {
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $http_host;
  proxy_pass http://B;
}

类似的事情发生在上(B),将所有请求传递给实际应用程序(还有其他位置指令,但这个是相关的):

location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;
    proxy_pass http://api_frontend;
}

我在会话 cookie 方面遇到了问题。应用程序(api 前端)正确设置了 cookie,我可以使用浏览器检查器查看它们。但是,当应用程序读取 cookie 时,它​​只接收一些 cookie,而不是会话 cookie。我认为双重 nginx 配置存在某种问题。

答案1

由于某种原因,cookie 从 nginx (A) 传递到 nginx (B),但没有传递到应用程序。我不知道为什么会这样,但我通过在位置主体中添加以下内容解决了我的问题:

proxy_set_header Cookie "session=$cookie_session"

其中session是感兴趣的 cookie 的名称。

相关内容