Node.js express-session代理选项有什么作用?

use*_*549 1 session proxy session-variables node.js express

app.use(session(
  {
    ...
    proxy: true,
    resave: true,
    saveUninitialized: true
  }
));
Run Code Online (Sandbox Code Playgroud)

我找到了有关快速会话的教程,并且它们具有proxy:true选项。我可以保留为真吗?这是做什么的?包含它更好吗?我知道什么是代理,但是我真的不明白为什么这是一个选择?

rob*_*lep 9

精细的手工状态:

设置安全cookie(通过“ X-Forwarded-Proto”标头)时,请信任反向代理。

这是指客户端不通过反向代理直接连接到您的节点服务器的情况。例如,客户端连接到NGINX Web服务器,该服务器将请求转发到Node服务器。在这种情况下,NGINX是反向代理。

在反向代理设置中,客户端通过HTTPS与反向代理进行通信也是很常见的,但是该代理使用纯HTTP与Node服务器进行通信。

当您配置会话中间件以使用所谓的“安全cookie”此处记录)时,这是一个问题。会话中间件不允许这些Cookie通过纯HTTP发送,但要求它们通过HTTPS发送。如果您的反向代理通过HTTP与Node服务器通信,则意味着您将无法使用安全cookie。

为了解决此问题,反向代理会将X-Forwarded-Proto报头设置为其转发的每个请求。它告诉节点服务器请求的原始协议是什么,而不管反向代理连接到节点服务器的方式如何。

使用proxy会话中间件的选项,就是告诉它信任此标头,并允许通过X-Forwarded-Proto设置为的纯HTTP发送安全cookie https

如果要直接公开Node服务器(以便客户端连接到该服务器),则应将此选项设置为false,因为否则,客户端可以欺骗您的服务器(通过发送X-Forwarded-Proto标头本身)以认为连接是安全的。但是,如果您仍然不使用安全cookie,那将不会有什么关系。


aps*_*ers 5

如果您的应用没有收到通过代理转发的请求,您无需担心此选项。代理通常用于将请求路由到多个应用程序之一。

代理如下所示:

[Client] ==request==> [Proxy] ==forwarded request==> [Server]
Run Code Online (Sandbox Code Playgroud)

在这里,服务器看不到原始请求,而是依靠代理将每个请求真实地关联起来。

express-session文档

代理
在设置安全 cookie 时信任反向代理(通过“X-Forwarded-Proto”标头)。

默认值为undefined

  • true 将使用“X-Forwarded-Proto”标头。
  • false 仅当存在直接 TLS/SSL 连接时,所有标头都将被忽略,并且连接才被认为是安全的。
  • undefined 使用 express 中的“信任代理”设置

查看堆栈溢出问题express.js 中“信任代理”实际上是做什么的,我是否需要使用它?(其中引用了“ Express behind proxies ”),我们看到“ trust proxy”表示应用程序是否信任其代理来准确报告请求的来源。这会影响安全的仅限 HTTPS 的 cookie:必须信任请求真正来自 HTTPS 源的代理。

[Client] ==HTTPS==> [Proxy] =="I'm forwarding an HTTPS request"==> [Server]
Run Code Online (Sandbox Code Playgroud)

服务器看不到客户端。如果代理在撒谎,并且它实际上不是来自客户端的 HTTPS 请求,则服务器不应发送安全 cookie。因此,我们可以表明我们是否信任服务器会如实报告转发请求的 HTTP/HTTPS 状态。