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.use
callback中req.secure
app.use
,如果没有app.enable('trust proxy')
, req.secure
总是为false
,当我添加app.enable('trust proxy')
时, https
redirect切换为true
。
app.enable('trust proxy')
, 文档:
指示应用程序位于前置代理的后面,并使用X-Forwarded- *标题来确定客户端的连接和IP地址。
我的问题:
为什么我的服务器会在代理的后面?(是否与已发布的*.herokuapp.com
证书有关?),如果有人能够解释所有的东西都合在一起,我的意思是,为什么我的服务器在代理之后? 为什么没有app.enable
expression不会识别(或接受)安全连接?
如果您不在代理之后运行,则不是必需的。 例如,如果您在服务器上运行多个网站,则可能会使用代理服务器。
X-Forwarded-For头部属性会在这样做的时候被添加,这样你的代理可以看到原始的URL是什么,最后代理将会去你看到的localhost。 之所以需要X-Forwared-For是伪造的,没有什么能阻止客户端添加这些,而不仅仅是一个代理。 所以只能在接收端启用信任代理,这将在防火墙之后。 因为你有控制权,所以你可以相信这一点。
所以简而言之,如果您的网站运行在代理之后,您可以启用它。 如果您的网站直接在80端口上运行,则不要相信它。 由于发件人可以假装从本地主机等来
- 在nodejs /expression如何允许履带的站点地图
- nodeJS + Swig模板将variables传递给javascript
- Jade如何处理src属性? 为什么/ javascripts直接进入文件夹而不是/../public/javascripts?
- 使用PassportJSvalidationAndroid应用程序
- 不加载“express-validator”:迁移到Express 3
- Express.js POST req.body为空
- Express js静态相对父目录
- 在Nodejs上获取“Error R10(引导超时) – > Web进程无法在启动后的60秒内绑定到$ PORT”
- 使用mustache.js部分快递