现在可以为NodeJS / Express提供像LocomotiveJS这样的MVC框架,我只是想知道如何在应用程序的一部分上实现SSL?
例如,电子商务应用。
我需要所有/结帐控制器强制使用SSL。
我已经阅读过像this one这样的教程但不确定如何使用机车来实现这一点,因为Express实际上已经“包裹”了?
答案 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。