2012-02-07 6 views
24

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

ответ

42

Я подтверждаю, на основе собственных тестов, что настройка 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/

+0

Можно ли использовать WSS со вторым вариантом? – whadar

+1

... и есть [модуль для работы с протоколом PROXY] (http://stackoverflow.com/q/17981943/201952). – josh3736

+0

... или текущий активный [fork] (https://github.com/findhit/proxywrap) указанного модуля. – jamix

10

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

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

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

+1

Часто более желательно прекратить SSL на AWS УДР, если только так, что обновления сертификатов легко выполняется в одном месте. Это также означает, что потенциально уязвимый код приложения не имеет доступа к сертификату. Недостатком, конечно же, является то, что связь между ELB и приложением незашифрована, но это можно смягчить с помощью VPC и усиленной сетевой безопасности. – jokeyrhyme

4

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

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

Недостатком является липкость и способность ELB пересылать запрос другому серверу, если текущий, который он выбирает, возвращает ошибку. –

1

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

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

Как вы настроили путь проверки работоспособности/пинга для этого? – BrokenGlass

+0

Я закончил создание отдельной, HTTP, конечной точки только для проверок работоспособности. Согласно [docs] (https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html), «... проверки работоспособности не поддерживают WebSockets». – dskrvk

+0

@ dskrvk Где и как вы установили конечную точку для проверки работоспособности? Вы используете nginx для вас ALB? Я в той же ситуации не запускаю nginx и теперь уверен, какой файл я должен обслуживать для проверки работоспособности и что он должен ответить? – jdog