用expressjs强制SSL 3

我正在运行一个没有代理和使用SSL的node.js express 3服务器。

我想弄清楚如何强制所有连接通过https。

谷歌search向我显示这一点:

https://groups.google.com/forum/#!topic/express-js/Bm6yozgoDSY

目前没有办法强制httpsredirect,虽然这似乎有点奇怪的解决办法。 我们有一个只有https的应用程序,我们只有一个简单的〜4行节点http服务器redirect,没有什么奇特的

这是我需要的,但他没有说这四条线是什么。

我们如何做到这一点? 谢谢。

我不明白启动两台服务器的意义,因为只有一台服务器可以完成这项工作。 例如,通过在您的服务器文件中添加一个简单的中间件:

app.use(function(req, res, next) { if(!req.secure) { return res.redirect(['https://', req.get('Host'), req.url].join('')); } next(); }); 

这会将任何不安全的请求redirect到相应的HTTPS页面。 例如, http://example.com/https://example.com/http://example.com/foo?bar=woohttps://example.com/foo?bar=woo 。 这绝对是我期望的行为。 也许你应该过滤主机,所以它只能redirect你拥有并安装了合适的证书的域名。

如果您的应用程序在Nginx之类的其他服务器之后运行,您可能需要添加configuration参数app.set('trust proxy', true) 。 或者,更好的做法是让Nginx自己做redirect,比任何Node.js应用程序更有效率。

编辑:根据我的基准,连接string连接比+快一点。 没有戏剧性的,但是每一场胜利都是一场胜利

您应该创build第二台监听80的服务器,并将301头redirect到您的https服务器:

 var express = require('express'); var app = express(); app.get('/', function(req, res, next){ res.redirect('https://' + app.address().address) }); app.listen(80);