【发布时间】:2017-03-17 10:33:47
【问题描述】:
WebSocket 端口 80 / 443 EC2 和 Erlang 的牛仔
我的生产环境是基于 EC2 实例的 CentOS 6.0,这些天我正在编写一个视频通信应用程序,我决定使用 Erlang,因为它是基于通信的应用程序的最佳语言。
我正在使用 Cowboy 的 WebSocket 进行实时通信,我决定使用端口 80,因为它在公司网络上具有高可用性,几天前它可以正常工作,但最近它停止工作了。
当我将它切换到 80 / 443 / 21 或 22 以外的任何其他端口时,它就像魅力一样工作,但不适用于这些标准端口,我禁用了所有防火墙并允许来自亚马逊安全组的所有类型的流量,但没有任何效果对我来说。
但是这个问题只发生在 WebSocket 上,我安装并使用了 apache,它在端口 80 上工作正常,我尝试的另一件事是我在端口 80 上安装了 haproxy 列表,并在不同的端口上设置了 WebSocket 请求的转发在这种情况下,端口是 8088,我注意到我在套接字服务器上收到了请求,但是一旦收到它就会自动断开连接。
请帮忙。
【问题讨论】:
-
服务器安装在哪里?如果它不在本地机器上,则有可能在您和服务器之间的中间安装了类似代理的软件;因此,如果该代理无法正确处理 websocket 协议,那么您就有问题了。
-
谢谢@fycth 我已经提到它是我的生产环境,我正在使用 EC2 / AWS,不,这不是代理问题,因为它在其他端口上运行良好,无论如何,谢谢。
-
我的意思是你和 AWS 服务器之间的某个地方可能有一个透明的 HTTP 代理。例如,您的 ISP(或您的公司)可能正在使用透明 HTTP 代理(如 Squid)缓存 Web 流量。如果是这样,那么它可能会破坏 WebSockets 协议。这显然是您的应用在其他端口上运行良好,因为它们仅缓存(如果有的话)仅 HTTP(端口 80),不会干扰其他端口上的流量。
-
@fycth 非常感谢你,你是绝对正确的,我在不同的网络上尝试过它,它在端口 80 上工作正常,有什么建议可以防止这种情况发生吗?使用 8088 等自定义端口是否安全?再次感谢。
-
我在答案中概述了这一切。
标签: amazon-web-services amazon-ec2 websocket erlang haproxy