我正在尝试为 Express.js 创建一个中间件,以将所有非安全(端口 80)流量重定向到安全 SSL 端口(443)。 不幸的是,Express.js 请求中没有任何信息可以让您确定请求是通过 http 还是 https。
一种解决方案是重定向每个请求,但这不是我的选择。
注意事项:
不可能用 Apache 或其他东西来处理它。 必须在 Node 中完成。
应用程序中只能启动一个服务器。
你会怎么解决这个问题?
最佳答案
以防万一您在 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/