Кажется, сейчас это не работает. Я использую 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:
http80->http80, https443->http80
http80->target group, https443->target group