javascript - 使用 expressjs 3 强制 SSL

标签 javascript node.js ssl https express

我正在运行一个没有代理并使用 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= woohttps://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/

相关文章:

javascript - 动画和防止动画在多次点击时触发

javascript - 数据表搜索框

javascript - 尝试使用 $.ajax 发送 JSON,改为发送查询字符串

node.js - 将项目添加到混合模式数组时,mongoose.save 的结果不正确

java - 提取公钥

javascript - 与对象进行 Angular 异步调用?

node.js - Chrome Headless puppeteer 占用太多 CPU

node.js - Node 和 Express - 获取请求 URL

Java信任库

ssl - 在 thingsboard 上启用 HTTPS