我有一个由两个相继连接的 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 的名称。