WebSockets: wss от клиента к экземпляру Amazon AWS EC2 через ELB

Как я могу подключить через ssl к websocket, обслуживаемому GlassFish на экземпляре Amazon AWS EC2 через ELB?

Я использую Tyrus 1.8.1 в предварительном выпуске GlassFish 4.1 b13 в качестве моей реализации websocket.

Порт 8080 не защищен, а порт 8181 защищен с помощью ssl.

  • Имя ELB dns: elb.xyz.com
  • Имя EC2 dns: ec2.xyz.com
  • путь к websocket:/web/socket

Я успешно использовал ws и wss для непосредственного подключения к моему экземпляру EC2 (в обход моего ELB). то есть работают оба следующих URL-адреса:

  • WS://ec2.xyz.com: 8080/веб/розетка
  • WSS://ec2.xyz.com: 8181/веб/розетка

Я успешно использовал ws (non-ssl) поверх своего ELB с помощью прослушивателя tcp 80 > tcp 8080. т.е. работает следующий URL:

  • WS://elb.xyz.com: 80/веб/розетка

Я, однако, не смог найти способ использовать wss, хотя мой ELB.

Я пробовал много вещей.

Я предполагаю, что наиболее вероятным способом заставить wss работать через мой ELB было бы создание слушателя tcp 8181 > tcp 8181 на моем ELB с включенным протоколом прокси и использование следующего URL:

  • WSS://elb.xyz.com: 8181/веб/розетка

К сожалению, это не работает. Я предполагаю, что мне, возможно, придется включить прокси-протокол на стеклянную рыбку, но я не смог узнать, как это сделать (или, если это возможно, или если это необходимо для работы wss над моим ELB).

Другой вариант может заключаться в том, чтобы каким-то образом ws или wss запускались через соединение ssl, которое было завершено на ELB, и чтобы он продолжал оставаться необработанным для стеклянной рыбы, используя прослушиватель ssl > tcp 8080. Для меня это тоже не сработало, но, возможно, некоторые настройки были неправильными.

Кто-нибудь имеет какие-либо изменения в моих двух вышеупомянутых испытаниях. Или у кого-нибудь есть другие предложения?

Спасибо.

Ответ 1

У меня была аналогичная настройка и изначально были настроены мои слушатели ELB следующим образом:

  • HTTP 80 HTTP 80
  • HTTPS 443 HTTPS 443

Хотя это сработало хорошо для самого веб-сайта, соединение с веб-узлом не удалось. В слушателе вам необходимо разрешить все защищенные TCP-соединения, а не только SSL, чтобы пропускать wss также:

  • HTTP 80 HTTP 80
  • SSL (Secure TCP) 443 SSL (Secure TCP) 443

Я также рекомендовал бы увеличить тайм-аут ожидания ELB.

Ответ 2

Недавно я включил wss между моим браузером и экземпляром EC2 Node.js. Было рассмотрено 2 вопроса:

  • на вкладке "Приемники ELB" добавьте строку для wss-порта с SSL в качестве протокола балансировки нагрузки.
  • на вкладке Описание ELB установите более высокий тайм-аут ожидания (настройки соединения), который по умолчанию составляет 60 секунд. ELB убивал подключения к сети через 1 минуту, установив тайм-аут простоя до 3600 (максимальное значение), обеспечивающее гораздо более длительную связь.

Это, конечно, не окончательное решение, так как тайм-аут все еще существует, но 1 час, вероятно, достаточно хорош для того, что мы обычно делаем.

надеюсь, что эта помощь