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

2023-12-27

我需要将 http 重定向到 https 并找到以下代码:

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

我正在使用heroku来托管我的项目,我注意到heroku作为默认发布*.herokuapp.comcert,所以我也可以使用 http 和 https。

当被看时req.secure within app.use回调,不带app.enable('trust proxy'), req.secure总是false,当我添加app.enable('trust proxy')大约有两次是错误的,之后https重定向它切换到true.

app.enable('trust proxy'), 文档: http://expressjs.com/en/api.html#app.settings.table

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

我的问题:

为什么我的服务器会位于代理后面?(这是否与发布的*.herokuapp.comcert?),如果有人可以解释如何将所有内容组合在一起,我的意思是,为什么我的服务器位于代理后面?以及为什么没有app.enableExpress 不会识别(或接受)安全连接?


如果您没有在代理后面运行,则不需要。例如,如果您在服务器上运行多个网站,则您很可能使用代理。

执行此操作时会添加 X-Forwarded-For 标头属性,以便您的代理可以看到原始 url 是什么,代理最终将转到您看到的本地主机。需要它的原因是 X-Forwared-For 可以被伪造,没有什么可以阻止客户端添加这些,而不仅仅是代理。因此,信任代理只能在接收端启用,即位于防火墙后面的接收端。因为您拥有控制权,所以您可以相信这一点。

简而言之,如果您的网站在代理后面运行,则可以启用它。如果您的网站直接在端口 80 上运行,您不想信任它。因为发件人可以假装来自本地主机等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NodeJS、Express,为什么我应该使用 app.enable('trust proxy'); 的相关文章

随机推荐