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

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

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

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

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

ОБНОВЛЕНИЕ Июль 2013 : Amazon только что добавила поддержку Proxy Protocol , который решает недостаток № 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/

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

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

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

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

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

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

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