Это, похоже, не работает прямо сейчас. Я использую Faye с NodeJS за Amazon ELB. Когда я включаю HTTPS, соединения больше не могут быть брокерами. Я нашел здесь вопрос без ответа: https://forums.aws.amazon.com/message.jspa?messageID=283293. Любой, кто может это сделать? Есть ли какая-нибудь работа за пределами моего собственного экземпляра HAProxy?Как вы получаете ELB Amazon с HTTPS/SSL для работы с веб-сокетами?
ответ
Я подтверждаю, на основе собственных тестов, что настройка ELB на TCP/SSL, а не о HTTP/HTTPS, делает трюк с WebSockets. Недостатки двух:
1) Как уже указывалось arturnt, вы не можете получить липкость.
2) Вы потеряете возможность получить личность клиентов. Исходный IP-адрес, видимый вашим сервером WebSocket, всегда будет одним из ELB, и, в отличие от конфигурации HTTP/HTTPS, в запросы не будет добавлен заголовок X-Forwarded-For.
ОБНОВЛЕНИЕ июля 2013: Amazon только что была добавлена поддержка Proxy протокола, который решает недостаток номер 2 выше. С прокси-протоколом заголовок, содержащий исходный IP-адрес клиента, добавляется даже тогда, когда ELB работает на уровне TCP, а не HTTP. Полная информация: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html
UPDATE августа 2016: Amazon только что объявил новый AWS Application Load Balancer, который поддерживает WebSocket на уровне 7 (а также HTTP/2.0 и маршрутизации контента на основе). См. https://aws.amazon.com/it/blogs/aws/new-aws-application-load-balancer/
Это не сработает, прокси-сервер HTTP (S) ELB не понимает запросы на веб-рассылку, по крайней мере, по крайней мере, и я не знаю, когда/если он запланирован.
Я не уверен, что HAProxy совершенно необходим. Должно быть возможно установить терминатор SSL, например. stud/stunnel, в том же экземпляре, что и ваши узловые серверы, и пройти через этот путь. Затем вы можете сохранить ELB, но поместите его в режим TCP.
Очевидно, что на каждом экземпляре есть накладные расходы SSL, но в конечном итоге, вероятно, масштабируется лучше, чем выгрузка SSL на ELB (в частности, на основе комментариев пользователей по эффективности SSL ELB).
Часто более желательно прекратить SSL на AWS УДР, если только так, что обновления сертификатов легко выполняется в одном месте. Это также означает, что потенциально уязвимый код приложения не имеет доступа к сертификату. Недостатком, конечно же, является то, что связь между ELB и приложением незашифрована, но это можно смягчить с помощью VPC и усиленной сетевой безопасности. – jokeyrhyme
После ответа Джеймса я провел немного больше исследований и перешел на маршрут TCP, не уверен, что есть какие-либо недостатки этого, связанные с использованием туннелирования ELB (учитывая, что мне не нужна липкость). Хорошо, что вам не нужно делать stud/stunnel, поскольку ELB предоставляет это для вас. Поэтому окончательная установка УЗО, где NodeJS/Faye слушаем порт 8000:
Secure TCP Forward (443) -> Local (8000)
TCP Forward 80 -> Local(8000)
Недостатком является липкость и способность ELB пересылать запрос другому серверу, если текущий, который он выбирает, возвращает ошибку. –
Вы можете использовать Application LB для надежной поддержки websocket.Я просто реализовать эту идею на нашем последний проект после того, как реализованы некоторые трюки на ALB:
- открытого порт 80 на все связанный SGs
- сделать NodeJS работает на 80
- позволяют NodeJS реагирующего HTTP-80 запроса (NodeJS будет обновить запрос HTTP, чтобы WebSocket в бэкэнде)
- сделать ALB целевой группы проверку HTTP-80 & правильного пути для пинга
- создать слушатель на ALB:
http80->http80, https443->http80
- CRE поел правила слушателя на ALB:
http80->target group, https443->target group
- Включить HTTP липкость в
Как вы настроили путь проверки работоспособности/пинга для этого? – BrokenGlass
Я закончил создание отдельной, HTTP, конечной точки только для проверок работоспособности. Согласно [docs] (https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html), «... проверки работоспособности не поддерживают WebSockets». – dskrvk
@ dskrvk Где и как вы установили конечную точку для проверки работоспособности? Вы используете nginx для вас ALB? Я в той же ситуации не запускаю nginx и теперь уверен, какой файл я должен обслуживать для проверки работоспособности и что он должен ответить? – jdog
Можно ли использовать WSS со вторым вариантом? – whadar
... и есть [модуль для работы с протоколом PROXY] (http://stackoverflow.com/q/17981943/201952). – josh3736
... или текущий активный [fork] (https://github.com/findhit/proxywrap) указанного модуля. – jamix