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 час, вероятно, достаточно хорош для того, что мы обычно делаем.
надеюсь, что эта помощь