我们正在设置cookie上的secure标志 ,而nginx拒绝传送它们,因为我们正在通过HTTP进行通信。
这是完全可以理解的,因为这是预期的行为。 然而,在nginx之前,我们运行一个Classic Load Balancer(以前称为Elastic Load Balancer),它接受来自Internet的HTTPSstream量,并通过HTTP与我们的内部networking上的nginx进行通信。
那么,有没有办法告诉nginx不去掉cookie,因为整个连接是可信的?
好吧,首先,当您正在使用基于HTTP cookie的会话debugging“奇怪”问题时,请确保检查服务器是否发送了相应的Set-Cookie头文件!
当你确定它没有被发送(像我那样)的时候,你将要设置环境variablesDEBUG为* ,以防你正在运行一个NodeJS / express应用程序。
如果这样做,您可能会在日志中find以下行:
cookie会话错误保存会话无法通过未encryption的连接发送安全cookie
然后,您会将该行追踪到cookie会话 ,然后进一步追踪到cookie 。 当你意识到这一切都与expression不把连接视为可信的时候。
所以nginx不会剥离任何cookie。 在某种程度上,这是责怪。 我在负载平衡器后面find了nginx $ schemevariables的答案。 引用接受的答案:
# Sets a $real_scheme variable whose value is the scheme passed by the load # balancer in X-Forwarded-Proto (if any), defaulting to $scheme. # Similar to how the HttpRealIp module treats X-Forwarded-For. map $http_x_forwarded_proto $real_scheme { default $http_x_forwarded_proto; '' $scheme; }
你会把它放到你的nginxconfiguration中,然后使用$real_scheme而不是$scheme作为X-Forwarded-Proto头文件:
proxy_set_header "X-Forwarded-Proto" $real_scheme;
默认情况下,nginx不做任何与secure标志相关的处理。