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

时间:2014-09-08 18:01:39

标签: ssl websocket glassfish wss 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>成功地在我的ELB上使用了ws(非ssl)。 tcp 8080听众。即以下网址有效:

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

然而,我没有找到一种方法来使用wss作为我的ELB。

我尝试了很多东西。

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

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

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

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

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

感谢。

2 个答案:

答案 0 :(得分:15)

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

  • HTTP 80 HTTP 80
  • HTTPS 443 HTTPS 443

虽然这适用于网站本身,但websocket连接失败了。在监听器中,您需要允许所有安全的TCP连接而不是SSL,以允许wss通过:

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

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

答案 1 :(得分:7)

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

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

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

希望这个帮助