【问题标题】:WebSockets: wss from client to Amazon AWS EC2 instance through ELBWebSockets:通过 ELB 从客户端到 Amazon AWS EC2 实例的 wss
【发布时间】:2014-11-02 00:48:05
【问题描述】:

如何通过 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/web/socket
  • wss://ec2.xyz.com:8181/web/socket

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

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

但是,我无法通过我的 ELB 找到使用 wss 的方法。

我尝试了很多东西。

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

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

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

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

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

谢谢。

【问题讨论】:

  • 早上好,我正在尝试在 php 中的亚马逊 ec2 服务器上运行 Web 服务,所以你提到你可以告诉我你是如何实现它以获得参考的,这对我有很大帮助我的电子邮件是 elvis1527@gmail.com

标签: ssl websocket glassfish wss amazon-elb


【解决方案1】:

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

  • HTTP 80 HTTP 80
  • HTTPS 443 HTTPS 443

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

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

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

【讨论】:

  • 我的意思是“与仅 HTTPS 相对”
  • 关于此的几件事:如果您更改此设置,您将无法打开粘性,并且根据亚马逊的文档,“经典负载均衡器”不支持 WebSockets:aws.amazon.com/elasticloadbalancing/details/#compare
  • 我爱你,你拯救了我们的工作日!
【解决方案2】:

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

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

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

希望有帮助

【讨论】:

    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 2018-03-26
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2013-01-06
    相关资源
    最近更新 更多