我正在运行一个没有代理并使用 SSL 的 node.js express 3 服务器。
我正在尝试弄清楚如何强制所有连接通过 https。
Google 搜索显示:
https://groups.google.com/forum/#!topic/express-js/Bm6yozgoDSY
There's currently no way to force https redirects, though that seems like a bit of a strange work-around. We have an https-only app and we just have a simple ~4 line node http server that redirects, nothing fancy
这是我需要的,但他没有说那 4 行是什么。
我们如何做到这一点?谢谢。
最佳答案
当只有一个可以完美地完成工作时,我真的不明白启动两台服务器的意义。例如,通过在您的服务器文件中添加一个简单的中间件:
app.use(function(req, res, next) {
if(!req.secure) {
return res.redirect(['https://', req.get('Host'), req.url].join(''));
}
next();
});
这会将任何非安全请求重定向到相应的 HTTPS 页面。例如,http://example.com/
到 https://example.com/
和 http://example.com/foo?bar= woo
到 https://example.com/foo?bar=woo
。这绝对是我所期望的行为。也许你应该按主机过滤它,所以它只重定向到你拥有并安装了适当证书的域。
如果您的应用在 Nginx 等其他服务器后面运行,您可能需要添加配置参数 app.set('trust proxy', true)
。或者,更好的是,让 Nginx 自己做重定向,这将比任何 Node.js 应用程序更有效。
编辑:根据我的基准测试,join
比 +
快一点,用于连接字符串。没什么戏剧性的,但每次胜利都是胜利......
关于javascript - 使用 expressjs 3 强制 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10697660/