Прокси-сервер AWS Loadbalancer для Nodejs

Я настроил балансировщик нагрузки для маршрутизации запроса к двум экземплярам Ec2, на которых запущен сервер NodeJs. Мне нужно направить запрос, поступающий как с http (порт 80), так и с https (порт 443) на http (порт 80) экземпляров EC2 в NodeJs. Я загрузил сертификат ssl в AWS и настроил балансировщик нагрузки на использование сертификата ssl. Проблема в том, что запрос, поступающий с http-порта, автоматически не перенаправляется на https. Это должен быть сценарий на стороне сервера или вырезанный, который мне нужно написать в server.js, который должен перенаправлять http на https, я пытался это сделать, и он столкнулся с бесконечным перенаправлением. Так что вопросы -

  • Есть ли какое-либо руководство для этого от AWS?
  • Если нет, то как можно этого добиться, любые указатели или предложения будут очень признательны.

comment
Вы используете nginx?   -  person eduPeeth    schedule 25.07.2018
comment
Нет, я не использую nginx.   -  person Jeet    schedule 25.07.2018
comment
Хм... Я считаю, что это именно та конфигурация в AWS, которая вам нужна. Я сделал это задолго до этого.   -  person eduPeeth    schedule 25.07.2018
comment
вы должны перенаправлять на https, только если это http, а не https. Может быть, просто настроить ваш server.js   -  person kirrmann    schedule 25.07.2018


Ответы (4)


На стороне сервера вы можете проверить X-Forwarded-Proto (протокол исходного запроса), и если это значение http, вы можете отправить перенаправление (http 302) на URL-адрес с протоколом https.

хотя с ALB (балансировщик нагрузки приложения вы можете указать набор правил, возможно, это можно сделать там..)

person gusto2    schedule 25.07.2018

Мне не удалось найти руководство от AWS, но я продолжу поиск и обновлю ответ, если найду его.

Обычно, когда вы пишете приложения на Node.js, вы указываете, на каком порту должно работать ваше приложение. Это означает, что вам понадобятся два разных сервера для прослушивания. И когда ваше приложение получает запрос через порт 80 (HTTP), оно должно перенаправляться на ваш HTTPS-сервер, как в этом ответе. .

Еще один момент, который может иметь отношение к вашему вопросу, заключается в том, что в производственных средах вы обычно не привязываете порт к своему серверу Node.js, поскольку он не готов к работе. Вероятно, вы захотите использовать обратный прокси-сервер и балансировщик нагрузки, такой как Nginx или HAProxy.

person Pedro Henrique    schedule 25.07.2018

Если вы используете AWS ALB (Application Load Balancer), сегодня они объявили о перенаправлении http->https. Посмотрите: https://exampleloadbalancer.com/redirect_demo.html

person CSA    schedule 26.07.2018

Поместите свой ELB за Cloudfront и в настройках вашего дистрибутива выберите переадресацию HTTP на HTTPS. введите описание изображения здесь Следующий документ будет полезен https://docs.aws.amazon.com/waf/latest/developerguide/tutorials-ddos-cross-service-ELB.html

Этот метод имеет два преимущества:

1-Ваша проблема будет решена

2-Вы можете использовать преимущества мощной CDN, для получения дополнительной информации о Cloudfront прочитайте https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html

Обновление:

Вы можете перенаправлять трафик с HTTP на HTTPS, изменив настройку Listeners в ELB. введите здесь описание изображения

person Reza Mousavi    schedule 26.07.2018