用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=woo
到https://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);