在IBM Bluemix上使用node-red将http重定向到https

时间:2017-08-31 06:08:50

标签: ibm-cloud node-red

在Bluemix上使用node-red,我能够在http://example.comhttps://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

请建议。

1 个答案:

答案 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