node.js - 如何在 Express.js 中强制使用 SSL/https

标签 node.js redirect ssl https express

我正在尝试为 Express.js 创建一个中间件,以将所有非安全(端口 80)流量重定向到安全 SSL 端口(443)。 不幸的是,Express.js 请求中没有任何信息可以让您确定请求是通过 http 还是 https。

一种解决方案是重定向每个请求,但这不是我的选择。

注意事项:

  1. 不可能用 Apache 或其他东西来处理它。 必须在 Node 中完成。

  2. 应用程序中只能启动一个服务器。

你会怎么解决这个问题?

最佳答案

以防万一您在 Heroku 上托管并且只想重定向到 HTTPS 而不管端口如何,这里是我们正在使用的中间件解决方案。

如果您在本地开发,则无需重定向。

function requireHTTPS(req, res, next) {
  // The 'x-forwarded-proto' check is for Heroku
  if (!req.secure && req.get('x-forwarded-proto') !== 'https' && process.env.NODE_ENV !== "development") {
    return res.redirect('https://' + req.get('host') + req.url);
  }
  next();
}

您可以将它与 Express(2.x 和 4.x)一起使用,如下所示:

app.use(requireHTTPS);

关于node.js - 如何在 Express.js 中强制使用 SSL/https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8605720/

相关文章:

javascript - 异步函数执行顺序

node.js - 导致无限循环的快速身份验证重定向

Django 信号重定向

java - 面对 javax.net.ssl.SSLHandshakeException : Received fatal alert: bad_certificate issue while implementing SSL two way authentication

postgresql - Keycloak 无法连接到 Postgres : "SSL connection is required"

javascript - Sequelize .sync 函数挂起 : emitter from serial. klass

html - 为什么 Chrome 将这个 HTML 呈现为一个完全空白的页面?来自 Node.js,遵循 The Node Beginner Book

python - 使用 python/urllib2 重定向后如何确定最终 URL?

php - CodeIgniter 3 重定向功能不起作用

amazon-web-services - 使用 aws-load-balancer-backend-protocol : "https" 时,nginx-ingress 不适用于 AWS ELB