Node.js express-session代理选项有什么作用?
Node.js express-session what does the proxy option do?
app.use(session(
{
...
proxy: true,
resave: true,
saveUninitialized: true
}
));
我找到了一个关于 express-session 的教程,他们有一个 proxy: true 选项。我可以让它保持真实吗?这是做什么的?包括它更好吗?我知道代理是什么,但我真的不明白为什么这是一个选项?
如果您的应用不接收通过代理转发的请求,则无需担心此选项。代理通常用于将请求路由到多个应用程序之一。
代理看起来像这样:
[Client] ==request==> [Proxy] ==forwarded request==> [Server]
这里,服务器看不到原始请求,依赖代理如实关联每个请求。
proxy
Trust the reverse proxy when setting secure cookies (via the "X-Forwarded-Proto" header).
The default value is undefined
.
true
The "X-Forwarded-Proto" header will be used.
false
All headers are ignored and the connection is considered secure only if there is a direct TLS/SSL connection.
undefined
Uses the "trust proxy" setting from express
查看 Stack overflow 问题 What does "trust proxy" actually do in express.js, and do I need to use it? (which references "Express behind proxies"),我们看到“trust proxy
”表示应用是否信任其代理来准确报告请求的来源。这会影响安全 HTTPS-只有 cookie:有必要相信代理请求真正来自 HTTPS 源。
[Client] ==HTTPS==> [Proxy] =="I'm forwarding an HTTPS request"==> [Server]
服务器看不到客户端。如果代理在撒谎,并且它实际上不是来自客户端的 HTTPS 请求,则服务器不应发送安全 cookie。因此,我们可以表明我们是否信任服务器如实报告转发请求的HTTP/HTTPS状态。
fine manual 状态:
Trust the reverse proxy when setting secure cookies (via the "X-Forwarded-Proto" header).
这是指客户端不直接连接到您的节点服务器,而是通过反向代理连接的情况。例如,客户端连接到 NGINX 网络服务器,它将请求转发到节点服务器;在这种情况下,NGINX 是反向代理。
在反向代理设置中,客户端通过 HTTPS 与反向代理通信,而代理使用纯 HTTP 与节点服务器通信也很常见。
当您将 session 中间件配置为使用 so-called "secure cookies"(已记录 here)时,这是一个问题。 session 中间件不允许这些 cookie 通过纯 HTTP 发送,但 要求 它们通过 HTTPS 发送。如果您的反向代理通过 HTTP 与您的节点服务器通信,这意味着您将无法使用安全 cookie。
为了解决这个问题,反向代理会为它转发的每个请求设置X-Forwarded-Proto
header。它告诉节点服务器请求的原始协议是什么,而不管反向代理连接到节点服务器的方式如何。
使用 session 中间件的 proxy
选项,您告诉它信任此 header 并允许通过纯 HTTP 发送安全 cookie,前提是 X-Forwarded-Proto
设置为 https
.
如果您直接公开您的节点服务器(以便客户端连接到它),您应该将此选项设置为 false
,否则,客户端可以欺骗您的服务器(通过发送 X-Forwarded-Proto
header 本身)认为连接是安全的。但是,如果您无论如何都不使用安全 cookie,那也无所谓。
app.use(session(
{
...
proxy: true,
resave: true,
saveUninitialized: true
}
));
我找到了一个关于 express-session 的教程,他们有一个 proxy: true 选项。我可以让它保持真实吗?这是做什么的?包括它更好吗?我知道代理是什么,但我真的不明白为什么这是一个选项?
如果您的应用不接收通过代理转发的请求,则无需担心此选项。代理通常用于将请求路由到多个应用程序之一。
代理看起来像这样:
[Client] ==request==> [Proxy] ==forwarded request==> [Server]
这里,服务器看不到原始请求,依赖代理如实关联每个请求。
proxy
Trust the reverse proxy when setting secure cookies (via the "X-Forwarded-Proto" header).The default value is
undefined
.
true
The "X-Forwarded-Proto" header will be used.false
All headers are ignored and the connection is considered secure only if there is a direct TLS/SSL connection.undefined
Uses the "trust proxy" setting from express
查看 Stack overflow 问题 What does "trust proxy" actually do in express.js, and do I need to use it? (which references "Express behind proxies"),我们看到“trust proxy
”表示应用是否信任其代理来准确报告请求的来源。这会影响安全 HTTPS-只有 cookie:有必要相信代理请求真正来自 HTTPS 源。
[Client] ==HTTPS==> [Proxy] =="I'm forwarding an HTTPS request"==> [Server]
服务器看不到客户端。如果代理在撒谎,并且它实际上不是来自客户端的 HTTPS 请求,则服务器不应发送安全 cookie。因此,我们可以表明我们是否信任服务器如实报告转发请求的HTTP/HTTPS状态。
fine manual 状态:
Trust the reverse proxy when setting secure cookies (via the "X-Forwarded-Proto" header).
这是指客户端不直接连接到您的节点服务器,而是通过反向代理连接的情况。例如,客户端连接到 NGINX 网络服务器,它将请求转发到节点服务器;在这种情况下,NGINX 是反向代理。
在反向代理设置中,客户端通过 HTTPS 与反向代理通信,而代理使用纯 HTTP 与节点服务器通信也很常见。
当您将 session 中间件配置为使用 so-called "secure cookies"(已记录 here)时,这是一个问题。 session 中间件不允许这些 cookie 通过纯 HTTP 发送,但 要求 它们通过 HTTPS 发送。如果您的反向代理通过 HTTP 与您的节点服务器通信,这意味着您将无法使用安全 cookie。
为了解决这个问题,反向代理会为它转发的每个请求设置X-Forwarded-Proto
header。它告诉节点服务器请求的原始协议是什么,而不管反向代理连接到节点服务器的方式如何。
使用 session 中间件的 proxy
选项,您告诉它信任此 header 并允许通过纯 HTTP 发送安全 cookie,前提是 X-Forwarded-Proto
设置为 https
.
如果您直接公开您的节点服务器(以便客户端连接到它),您应该将此选项设置为 false
,否则,客户端可以欺骗您的服务器(通过发送 X-Forwarded-Proto
header 本身)认为连接是安全的。但是,如果您无论如何都不使用安全 cookie,那也无所谓。