node.js express+;aws elb-从http重定向到https不工作
我知道这已经在这里被问到和回答了,但仍然没有解决方案对我有效。以下是app.js:node.js express+;aws elb-从http重定向到https不工作,node.js,express,amazon-elb,Node.js,Express,Amazon Elb,我知道这已经在这里被问到和回答了,但仍然没有解决方案对我有效。以下是app.js: var express = require('express'); var app = express(); app.all(function(req, res, next){ if((!req.secure) && (req.get('X-Forwarded-Proto') !== 'https')) {
var express = require('express');
var app = express();
app.all(function(req, res, next){
if((!req.secure) && (req.get('X-Forwarded-Proto') !== 'https'))
{
console.log (req.get('Host'));
console.log("not secure");
res.redirect('https://' + req.get('Host') + req.url);
}
else{
console.log("secure");
next();
}
}
);
app.use(express.static('./server/static/'));
app.listen(8080);
我也尝试过使用app.use,但仍然不起作用。
我们正在使用AWS ELB,以下是侦听器:
LB协议| LB端口|实例协议|实例端口
HTTPS | 443 | HTTP | 8080HTTP | 80 | HTTP | 8080 正如在其他帖子中提到的,我在我的请求头中没有看到“x-forwarded-proto”。我相信监听器的配置是正确的,因此它们应该包含“x-forwarded”头,但事实并非如此 当我尝试在没有https的情况下点击dns时,它不会被重定向到https。 但是,http和https URL各自都可以正常工作
请帮我找出我遗漏了什么,或者是否需要提供更多信息。您可能需要同时检查“X-Forwarded-Proto”和“X-Forwarded-Proto”(小写)。此外,请求在应用程序中永远不会安全,因此您还应该删除req.secure检查。最终的代码应该如下所示:
function forceHttps(req, res, next) {
const xfp =
req.headers["X-Forwarded-Proto"] || req.headers["x-forwarded-proto"];
if (xfp === "http") {
const secureUrl = `https://${req.headers.hostname}${req.url}`;
res.redirect(301, secureUrl);
} else {
next();
}
}
我们将此代码用于弹性负载平衡器后面的Express应用程序,它运行良好。如果您不想自己编写中间件,我们甚至创建了一个小的NPM包来处理这个问题:
安装
npm i --save @crystallize/elasticloadbalancer-express-force-https
用法
更多信息请参见我们的博文:
您可能需要同时检查“X-Forwarded-Proto”和“X-Forwarded-Proto”(小写)。此外,请求在应用程序中永远不会安全,因此您还应该删除req.secure检查。最终的代码应该如下所示:
function forceHttps(req, res, next) {
const xfp =
req.headers["X-Forwarded-Proto"] || req.headers["x-forwarded-proto"];
if (xfp === "http") {
const secureUrl = `https://${req.headers.hostname}${req.url}`;
res.redirect(301, secureUrl);
} else {
next();
}
}
我们将此代码用于弹性负载平衡器后面的Express应用程序,它运行良好。如果您不想自己编写中间件,我们甚至创建了一个小的NPM包来处理这个问题:
安装
npm i --save @crystallize/elasticloadbalancer-express-force-https
用法
更多信息请参见我们的博文:
@robertklep我能请你看看这个吗?很抱歉,我在这些帖子上看到了你的答案和评论。@robertklep我能请你看看这个吗?很抱歉这个绝望的求助电话,但我已经在这些帖子上看到了你的答案和评论。