在Bluemix上使用node-red,我能够在http://example.com
和https://example.com
上运行我的应用程序。但是,我希望我的应用程序是安全的,只能使用https访问。我找不到在Bluemix上运行的node-red上将http重定向到https的方法。我发现只能在node.js / express和其他Web服务器上执行此操作。
我还尝试通过检测msg.req.headers.$wssc
对我的应用程序进行重定向,并使用http请求节点重定向到https url,但它不起作用(仍然有http响应)。
在DNS上配置重定向也不是一个选项,因为AFAIK,您无法将http://example.com
重定向到https://example.com
,但您可以将http://example.com
重定向到https://www.example.com
。
请建议。
答案 0 :(得分:3)
您应该可以使用msg.req.headers.x-forwarded-proto
值然后发送具有301状态的响应来执行此操作,例如
if (msg.req.headers['x-forwarded-proto'] == 'http') {
msg.statusCode = 301;
msg.headers = {
location: 'https://' + msg.req.get('host') + msg.req.originalUrl
}
msg.payload = "";
return [null, msg]
} else {
return [msg, null]
}
如果你把它放在一个带有2个输出的功能节点中,它会将重定向发送到第二个输出,否则将它发送出去。
您也可以在httpNodeMiddleware
中添加自己的settings.js
功能,这样做:
....
httpNodeMiddleware: function(req, res, next){
if (req.headers['x-forwarded-proto'] == 'http') {
res.redirect(301, 'https://' + req.get('host') + req.originalUrl);
} else {
next();
}
},
...
此方法意味着您不需要流程中的任何重定向逻辑
旁注:
您可能需要测试msg.req.headers['$wssc']
而不是msg.req.headers.$wssc
。