Подтвердить что ты не робот

Как вы получаете Amazon ELB с HTTPS/SSL для работы с веб-сокетами?

Сейчас это не работает. Я использую Faye с NodeJS за Amazon ELB. Когда я включаю HTTPS, соединения больше не могут быть брокерами. Я нашел здесь вопрос без ответа: https://forums.aws.amazon.com/message.jspa?messageID=283293. Любой, кто может это сделать? Есть ли какая-нибудь работа за пределами запуска моего собственного экземпляра HAProxy?

4b9b3361

Ответ 1

Я подтверждаю, основываясь на наших собственных тестах, что настройка ELB на TCP/SSL, а не на HTTP/HTTPS, делает трюк с помощью WebSockets. Недостатки - два:

1) Как уже указывалось arturnt, вы не можете получить липкость.

2) Вы потеряете возможность получить личность клиентов. Исходный IP-адрес, видимый вашим сервером WebSocket, всегда будет одним из ELB и, в отличие от конфигурации HTTP/HTTPS, в запросы не будет добавлен заголовок X-Forwarded-For.

ОБНОВЛЕНИЕ Июль 2013: Amazon только что добавила поддержку Прокси-протокола, который решает недостаток № 2 выше. С прокси-протоколом заголовок, содержащий IP-адрес клиента, добавляется даже тогда, когда ELB работает на уровне TCP, а не HTTP. Полная информация: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html

ОБНОВЛЕНИЕ Август 2016: Amazon только что анонсировала новый AWS Application Load Balancer, который поддерживает WebSocket на уровне 7 (а также HTTP/2.0 и маршрутизацию на основе контента), См. https://aws.amazon.com/it/blogs/aws/new-aws-application-load-balancer/

Ответ 2

Это не сработает, прокси-сервер ELB HTTP (S) не понимает запросы websocket, по крайней мере, пока что, и я не знаю, когда/если он планируется.

Я не уверен, что HAProxy совершенно необходим. Должно быть возможно установить терминатор SSL, например. stud/stunnel, в том же экземпляре, что и ваши узловые серверы, и пройти через этот путь. Затем вы можете сохранить ELB, но поместите его в режим TCP.

Очевидно, что на каждом экземпляре есть накладные расходы SSL, но в конечном итоге, вероятно, масштабируется лучше, чем выгрузка SSL на ELB (в частности, на основе комментариев пользователей на производительность ELB SSL).

Ответ 3

После ответа Джеймса я сделал немного больше исследований и перешел на маршрут TCP, но не уверен, что есть какие-то недостатки, связанные с использованием HTTP-туннелирования ELB (учитывая, что мне не нужна липкость). Хорошо, что вам не нужно делать stud/stunnel, поскольку ELB предоставляет это для вас. Итак, окончательная настройка ELB, где NodeJS/Faye прослушивает порт 8000:

Secure TCP Forward (443) -> Local (8000)
TCP Forward 80 -> Local(8000)

Ответ 4

Вы можете использовать Application LB для поддержки websocket. Я только что реализовал эту идею в нашем последнем проекте после реализации некоторых трюков в ALB:

  • открыть порт 80 на всех связанных SG.
  • сделать NodeJS на 80
  • включить NodeJS, отвечающий на запрос http-80 (NodeJS обновит http-запрос к websocket в бэкэнд)
  • сделать контрольную группу ALB для проверки http-80 и исправить трассировку пинга
  • создать прослушиватели в ALB: http80->http80, https443->http80
  • создать правила прослушивания в ALB: http80->target group, https443->target group
  • Включить липкость http в