为LocomotiveJS应用程序实现/强制SSL(NodeJS / Express)

时间:2012-08-18 16:56:44

标签: node.js ssl locomotivejs

现在可以为NodeJS / Express提供像LocomotiveJS这样的MVC框架,我只是想知道如何在应用程序的一部分上实现SSL?

例如,电子商务应用。

我需要所有/结帐控制器强制使用SSL。

我已经阅读过像this one这样的教程但不确定如何使用机车来实现这一点,因为Express实际上已经“包裹”了?

2 个答案:

答案 0 :(得分:2)

目前,机车不直接支持SSL,但根据this Google Groups posting in April机车的创造者Jared Hanson的说法,SSL应该很快就会支持。

  

目前,我一直把机车放在代理商的后面   终止SSL。但是,我将为此添加一个命令行选项   不久,直接支持。

也就是说,如果您想要一个完全基于节点的解决方案而不使用代理,那么暂时您需要编辑机车中的Express实例。我已经测试了下面的内容并且运行良好。

在编写时,npm install locomotive使用Express 2.x,尽管github上的最新版本已更新为使用Express 3.x.

如果你正在使用Express 2.x的机车,那么我认为你必须在180行左右编辑/locomotive/lib/locomotive/index.js,看起来像这样:

var sslOptions = {
    cert : fs.readFileSync('/path/to/your/ssl-cert/dev.crt')
  , key  : fs.readFileSync('/path/to/your/ssl-key/dev.key')
};

var self = this
  , server = express.createServer(sslOptions)
  , entry;

此外,您可能仍希望侦听HTTP并将所有流量重定向到HTTPS。坚持使用基于节点的全部解决方案,您可以在/locomotive/lib/locomotive/cli/server.js末尾启动另一台Express服务器,将其所有流量重定向到HTTPS,例如

    ...
    debug('booting app at %s in %s environment', dir, env);
    locomotive.boot(dir, env, function(err, server) {
    if (err) { throw err; }
    server.listen(port, address, function() {
      var addr = this.address();
      debug('listening on %s:%d', addr.address, addr.port);
    });

    // add an http server and redirect all request to https
    var httpServer = require('express').createServer();
    httpServer.all('*', function(req, res) {
      res.redirect('https://' + address + ':' + port + req.url);
    });
    httpServer.listen(80); // probably change based on NODE_ENV
  });
}

最后,启动服务器:

$ lcm server -p 443 # again, probably use different port in development

答案 1 :(得分:0)

所有这些框架都基于Express,它基于连接,具有HTTPS支持。

无论如何,在现实生活中,您可能希望有一个nginx /或其他代理为您处理https。