NodeJS,Express,为什么我应该使用app.enable('trust proxy');

我需要将httpredirect到https,并find此代码:

app.enable('trust proxy'); app.use((req, res, next) => { if (req.secure) { next(); } else { res.redirect('https://' + req.headers.host + req.url); } }); 

我使用的是heroku来托pipe我的项目,我注意到heroku是默认发布的*.herokuapp.com证书,所以我可以使用http和https。

当在app.usecallback中req.secure app.use ,如果没有app.enable('trust proxy')req.secure总是为false ,当我添加app.enable('trust proxy')时, httpsredirect切换为true

app.enable('trust proxy') , 文档:

指示应用程序位于前置代理的后面,并使用X-Forwarded- *标题来确定客户端的连接和IP地址。

我的问题:

为什么我的服务器会在代理的后面?(是否与已发布的*.herokuapp.com证书有关?),如果有人能够解释所有的东西都合在一起,我的意思是,为什么我的服务器在代理之后? 为什么没有app.enableexpression不会识别(或接受)安全连接?

如果您不在代理之后运行,则不是必需的。 例如,如果您在服务器上运行多个网站,则可能会使用代理服务器。

X-Forwarded-For头部属性会在这样做的时候被添加,这样你的代理可以看到原始的URL是什么,最后代理将会去你看到的localhost。 之所以需要X-Forwared-For是伪造的,没有什么能阻止客户端添加这些,而不仅仅是一个代理。 所以只能在接收端启用信任代理,这将在防火墙之后。 因为你有控制权,所以你可以相信这一点。

所以简而言之,如果您的网站运行在代理之后,您可以启用它。 如果您的网站直接在80端口上运行,则不要相信它。 由于发件人可以假装从本地主机等来