WebSockets:通过ELB从客户端到Amazon AWS EC2实例

XDR*_*XDR 15 ssl wss glassfish websocket amazon-elb

如何通过ELB将ssl连接到由GlassFish在Amazon AWS EC2实例上提供的websocket?

我在GlassFish 4.1 b13预发布中使用Tyrus 1.8.1作为我的websocket实现.

端口8080是不安全的,端口8181是用ssl保护的.

  • ELB dns名称:elb.xyz.com
  • EC2 dns名称:ec2.xyz.com
  • websocket路径:/ web/socket

我已成功使用ws和wss直接连接到我的EC2实例(绕过我的ELB).即以下两个网址都有效:

  • WS://ec2.xyz.com:8080 /网络/插座
  • WSS://ec2.xyz.com:8181 /网络/插座

我已经通过使用tcp 80> tcp 8080监听器在我的ELB上成功使用了ws(非ssl).即以下网址有效:

  • WS://elb.xyz.com:80 /网络/插座

但是,我没有能够通过我的ELB找到使用wss的方法.

我尝试了很多东西.

我假设最有可能通过我的ELB工作的方法是在我的ELB上创建一个tcp 8181> tcp 8181监听器并启用代理协议,并使用以下URL:

  • WSS://elb.xyz.com:8181 /网络/插座

不幸的是,这不起作用.我想我可能必须在glassfish上启用代理协议,但是我无法找到如何做到这一点(或者如果可能的话,或者wss是否有必要在我的ELB上工作).

另一种选择可能是以某种方式使用ws或wss运行在ELB上终止的ssl连接,并通过使用ssl> tcp 8080侦听器使其继续对glassfish不安全.这对我来说也不起作用,但也许有些设置不正确.

有没有人对我上述两项试验进行任何修改.或者有人有其他建议吗?

谢谢.

gui*_*iot 17

我有类似的设置,最初配置我的ELB监听器如下:

  • HTTP 80 HTTP 80
  • HTTPS 443 HTTPS 443

虽然这对网站本身来说很好,但是websocket连接失败了.在侦听器中,您需要允许所有安全的TCP连接而不是SSL,以允许wss也通过:

  • HTTP 80 HTTP 80
  • SSL(安全TCP)443 SSL(安全TCP)443

我还建议提高ELB的空闲超时.

  • 谢谢,安全TCP而不是HTTPS做了伎俩! (3认同)
  • “ SSL(安全TCP)443 TCP 80”也可以正常工作 (2认同)

pev*_*uve 7

我最近在我的浏览器和EC2 Node.js实例之间启用了wss.有两件事需要考虑:

  • 在ELB侦听器选项卡中,使用SSL作为负载均衡器协议为wss端口添加一行.
  • 在ELB描述选项卡中,设置更高的空闲超时(连接设置),默认为60秒.ELB在1分钟后杀死websocket连接,将空闲超时设置为3600(最大值)可以实现更长的通信.

这显然不是终极解决方案,因为超时仍然存在,但1小时可能足够我们通常做的事情.

希望这个帮助