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



如何通过ELB通过ssl连接到亚马逊AWS EC2实例上GlassFish提供的网络套接字?

我使用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)。即以下两个url都有效:

  • ws://ec2.xyz.com:8080/web/socket
  • wss://ec2.xyz.com:8181/web/socket

通过使用tcp80>tcp8080侦听器,我成功地在ELB上使用了ws(非ssl)。即以下url有效:

  • ws://elb.xyz.com:80/web/socket

然而,我还没有找到一种通过ELB使用WS的方法。

我试过很多东西。

我认为,让ws通过我的ELB工作的最可能的方法是在启用代理协议的ELB上创建一个tcp8181>tcp8181侦听器,并使用以下url:

  • wss://elb.xyz.com:8181/web/socket

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

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

有人对我前面提到的两个试验有任何修改吗。或者有人有其他建议吗?

谢谢。

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

  • HTTP 80 HTTP 80
  • HTTPS 443 HTTPS 443

尽管这对网站本身很有效,但websocket连接失败了。在侦听器中,您需要允许所有安全的TCP连接,而不是只允许SSL,以允许WS也通过:

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

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

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

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

这显然不是最终的解决方案,因为超时仍然存在,但对于我们通常所做的事情来说,1小时可能已经足够了

希望这能帮助

相关内容

  • 没有找到相关文章

最新更新