随着NodeJS / Express现在可以使用像LocomotiveJS这样的MVC框架,我想知道如何在应用程序的一部分实现SSL?
例如,一个电子商务应用程序。
我需要所有的/checkout控制器来强制使用SSL。
我读过像this one这样的教程,但不确定如何用火车头实现这一点,因为Express实际上是“包装”的?
发布于 2012-08-19 12:51:30
根据火车头的创建者Jared Hanson的this Google Groups posting in April的说法,目前火车头还没有直接支持SSL,但应该很快就会支持。
目前,我一直把火车头放在终止SSL的代理后面。但是,我很快就会为此添加一个命令行选项,以提供直接支持。
也就是说,如果您希望在不使用代理的情况下获得完全基于节点的解决方案,那么目前您需要在Locomotive中编辑Express实例。我已经测试了下面的,它工作得很好。
在撰写本文时,npm install locomotive使用的是Express2.x,不过github的最新版本已经更新为使用Express3.x。
如果你在Express2.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发布于 2012-08-19 01:00:19
所有这些框架都是基于Express之上的,Express基于connect,它支持HTTPS。
无论如何,在现实生活中,你可能希望有一个nginx/或其他代理为你处理https。
https://stackoverflow.com/questions/12020482
复制相似问题