我们在 cookie 上设置了secure
标志,而 nginx 拒绝传输它们,因为我们通过 HTTP 与它通信。
这是完全可以理解的,因为这是预期的行为。但是,在 nginx 前面,我们运行一个 Classic Load Balancer(以前称为 Elastic Load Balancer),它接受来自 Internet 的 HTTPS 流量并通过 HTTP 与我们内部网络上的 nginx 通信。
那么,有没有办法告诉 nginx 不要剥离 cookie,因为整个连接是受信任的?
我们在 cookie 上设置了secure
标志,而 nginx 拒绝传输它们,因为我们通过 HTTP 与它通信。
这是完全可以理解的,因为这是预期的行为。但是,在 nginx 前面,我们运行一个 Classic Load Balancer(以前称为 Elastic Load Balancer),它接受来自 Internet 的 HTTPS 流量并通过 HTTP 与我们内部网络上的 nginx 通信。
那么,有没有办法告诉 nginx 不要剥离 cookie,因为整个连接是受信任的?
好吧,首先,当您调试基于 HTTP cookie 的会话的“奇怪”问题时,请确保检查
Set-Cookie
服务器是否发送了适当的标头!当您确定它没有被发送时(就像我所做的那样),您需要将环境变量设置
DEBUG
为*
,以防您正在运行 NodeJS/express 应用程序。如果这样做,您可能会在日志中发现以下行:
然后,您将跟踪该行到cookie-session,然后进一步跟踪到cookies。当您意识到这一切都与表达不将连接视为受信任时有关。
所以 nginx 不会剥离任何 cookie。在某种程度上,这是罪魁祸首。我在负载均衡器后面的 nginx $scheme 变量中找到了答案。引用接受的答案:
您可以将其放入您的 nginx 配置中,然后使用
$real_scheme
而不是$scheme
用于X-Forwarded-Proto
标头:默认情况下,nginx 不做任何与
secure
flag 相关的处理。