如何通过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小时可能已经足够了
希望这能帮助