app.use(session(
{
...
proxy: true,
resave: true,
saveUninitialized: true
}
));
我找到了一个关于快速会话的教程,他们有一个代理:true选项。我可以保留它吗?这是做什么的?包含它会更好吗?我知道代理是什么,但我真的不知道为什么这是一个选项?
答案 0 :(得分:4)
设置安全cookie时信任反向代理(通过“X-Forwarded-Proto”标题)。
这是指客户端不直接连接到您的节点服务器,而是通过反向代理连接的情况。例如,客户端连接到NGINX Web服务器,该服务器将请求转发到节点服务器;在这种情况下,NGINX是反向代理。
在反向代理设置中,客户端通过HTTPS与反向代理通信也很常见,但代理使用普通HTTP与节点服务器通信。
当您将会话中间件配置为使用所谓的“安全cookie”(记录为here)时,这是一个问题。会话中间件不允许这些cookie通过普通HTTP发送,但要求它们是通过HTTPS发送的。如果您的反向代理通过HTTP与您的节点服务器通信,这将意味着您将无法使用安全cookie。
要解决此问题,反向代理会将X-Forwarded-Proto
标头设置为它转发的每个请求。它告诉节点服务器请求的原始协议是什么,无论反向代理连接到节点服务器的方式如何。
使用会话中间件的proxy
选项,只要X-Forwarded-Proto
设置为https
,您就会告诉它信任此标头并允许通过纯HTTP发送安全Cookie
如果您直接暴露节点服务器(因此客户端连接到它),您应该将此选项设置为false
,否则,客户端可能会欺骗您的服务器(通过发送X-Forwarded-Proto
标头本身)认为连接是安全的。但是,如果您还没有使用安全cookie,那就无所谓了。
答案 1 :(得分:3)
如果您的应用未收到通过代理转发的请求,则无需担心此选项。代理通常用于将请求路由到多个应用程序之一。
代理如下:
[Client] ==request==> [Proxy] ==forwarded request==> [Server]
在这里,服务器无法看到原始请求,并依赖代理来真实地关联每个请求。
<强>代理强>
在设置安全cookie时信任反向代理(通过“X-Forwarded-Proto”标题)。默认值为
undefined
。
true
将使用“X-Forwarded-Proto”标题。false
只有在存在直接TLS / SSL连接时,才会忽略所有标头,并认为连接是安全的。- 中的“信任代理”设置
undefined
使用快递
查看堆栈溢出问题What does "trust proxy" actually do in express.js, and do I need to use it?(引用“Express behind proxies”),我们看到“trust proxy
”表示应用是否信任其代理以准确报告来源请求。这会影响安全的仅HTTPS cookie:必须信任请求真正来自HTTPS源的代理。
[Client] ==HTTPS==> [Proxy] =="I'm forwarding an HTTPS request"==> [Server]
服务器无法看到客户端。如果代理正在撒谎,并且它实际上不是来自客户端的HTTPS请求,则服务器不应发送安全cookie。因此,我们可以指示我们是否信任服务器如实报告转发请求的HTTP / HTTPS状态。