5

Я пытаюсь заставить все HTTP-запросы к https-запросам, и я столкнулся с проблемой, поскольку эластичный балансировщик нагрузки не заполняет заголовок x-forwarded-proto в запросе.Amazon Elastic load balancer не заполняет заголовок 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); 
    } 
}); 

ответ

12

Похоже, что ваши слушатели ELB могут быть настроены для TCP вместо HTTP. Настроенный для TCP, он не будет добавлять X-Forwarded-Proto или X-Forwarded-For.

1

Отправлять запросы http и https в два разных порта. Если запрос будет отправлен на порт http, вы можете с уверенностью перенаправить его.

+0

Вы имеете в виду два порта, а затем два http-сервера в 'app.js'? Фактически все это автоматически настраивается EBS и балансировщиками нагрузки. Это проблема. – user883499

+0

Что вы подразумеваете под автоматически настроенным? Вы используете эластичный бобовый стебель? Если вы создали балансировщик нагрузки, вы можете настроить слушателей так, как хотите. – datasage

+0

Хорошо, я уже настроил слушателей на разных портах. http на 80 и https на 443. Как использовать эту информацию в моем 'app.js'. Я имел в виду, что после настройки этих слушателей все остальное автоматически выполняется EBS и балансировщиком нагрузки. – user883499

Смежные вопросы