我正在尝试强制所有http请求到https请求,因为弹性负载均衡器没有在请求中填充x-forwarded-proto标头,所以我遇到了问题。
这是我正在使用的代码,因此导致重定向循环。我该如何解决这个问题?
app.use (function (req, res, next) {
console.log('Request headers = ' + JSON.stringify(req.headers));
console.log('Request protocol = ' + JSON.stringify(req.protocol));
var schema = (req.headers['x-forwarded-proto'] || '').toLowerCase();
if (schema === 'https') {
next();
} else {
res.redirect('https://' + req.headers.host + req.url);
}
});
答案 0 :(得分:13)
听起来您的ELB侦听器可能配置为TCP而不是HTTP。配置为TCP,它不会添加X-Forwarded-Proto或X-Forwarded-For。
答案 1 :(得分:1)
将http和https请求发送到两个不同的端口。如果请求通过http端口发出,则可以安全地重定向它。