Amazon Elastic负载均衡器未填充x-forwarded-proto标头

时间:2013-09-27 11:13:34

标签: node.js amazon-web-services express amazon-ec2 load-balancing

我正在尝试强制所有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);
    }
});

2 个答案:

答案 0 :(得分:13)

听起来您的ELB侦听器可能配置为TCP而不是HTTP。配置为TCP,它不会添加X-Forwarded-Proto或X-Forwarded-For。

答案 1 :(得分:1)

将http和https请求发送到两个不同的端口。如果请求通过http端口发出,则可以安全地重定向它。