Jay*_*ard 16 javascript amazon-ec2 amazon-web-services websocket
我最近设置了一个EC2实例(在没有负载均衡器的VPC中),不可否认配置有点奇怪,但它是我们运行的Web应用程序所需要的.
Web服务器(在Haskell中)在端口4433上运行(标准端口是为Apache实例保留的),并且正在接收从另一个系统广播的UDP数据包.我有很多端口是开放的(仅在测试期间),如此处所示(来自安全组):
Custom TCP Rule 4433 tcp 0.0.0.0/0 ?
Custom TCP Rule 8080 tcp 0.0.0.0/0 ?
SSH 22 tcp 0.0.0.0/0 ?
HTTP 80 tcp 0.0.0.0/0 ?
HTTPS 443 tcp 0.0.0.0/0 ?
Custom UDP Rule 30090 udp 0.0.0.0/0 ?
Custom UDP Rule 30089 udp 0.0.0.0/0 ?
Run Code Online (Sandbox Code Playgroud)
TCP套接字的JavaScript请求在同一端口上设置套接字(使用分配给AWS公共IP的URL),这是请求返回错误的位置:
与'wss:// [URL]:4433/projects/socket'的WebSocket连接失败:WebSocket打开握手被取消.
将套接字绑定到0.0.0.0会导致相同的错误.
为了启动Haskell Web服务器,我必须引用AWS提供的内部 IP,因为它在引用弹性IP服务提供的公共 IP 时不会运行.想到这就是问题出现的地方我把套接字请求改成了这个......
wss://[internal ip]:4433/projects/socket
Run Code Online (Sandbox Code Playgroud)
这会改变错误:
与'wss:// [内部IP]:4433/projects/socket'的WebSocket连接失败:连接建立错误:net :: ERR_CONNECTION_REFUSED
这个错误对我来说很有意义,因为外部世界无法获得内部IP.
我在AWS上的websockets上阅读的所有内容都涉及ELB(Elastic Load Balancer),而我不需要其中的一个.我已经尝试了所有当前发布的答案中的所有内容(有些问题甚至没有得到答案),但无济于事.我还设置了亚马逊(近24小时前)的支持案例,该案例尚未收到回复.
导航到http://[URL]:4433/projects/socket'WebSocket Available',其中URL是我们希望使用的URL以及AWS提供的公共DNS.
运行netstat -plunt显示以下内容:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 [internal IP]:8080 0.0.0.0:* LISTEN -
tcp 0 0 [internal IP]:4433 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 :::443 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
udp 0 0 [internal IP]:30089 0.0.0.0:* -
udp 0 0 0.0.0.0:30090 0.0.0.0:* -
udp 0 0 0.0.0.0:11950 0.0.0.0:* -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
udp6 0 0 :::38450 :::* -
Run Code Online (Sandbox Code Playgroud)
有人在AWS上遇到类似的websockets问题吗?如果是这样,你是如何解决这个问题的?
Jay*_*ard 19
Haskell服务器和Apache服务器之间存在SSL证书不匹配.
必须使用有关实例的新证书的信息重建Haskell服务器.更复杂的libssl0.9.8 libssl-dev是,EC2实例上没有安装正确的SSL库(),这在重建Haskell服务器期间导致了我的问题.知道EC2实例是一个"空白画布",使得缺少该安装是我的错.
一旦我libssl安装了,我就能够重建Haskell服务器,并指向新的证书.一旦证书"匹配",websocket问题就消失了.
重申一下,我们的情况是独一无二的.我们有一个Apache服务器(端口80和443)和一个Haskell服务器(端口8080和4433),它们相互通信,通过websockets执行pub-sub操作.两个服务器之间的证书不匹配(它不重要的是什么类型,它可能是多个Apache实例)导致SSL警告.来自SSL的任何警告都将删除任何建立或维护websocket的尝试(因此取消了握手消息).
另一篇StackOverflow帖子提供了一些在此过程中提供巨大帮助的线索.更具体地说这个警告 -
问题的关键在于:如果您的SSL证书导致任何类型的警告,wss:// WebSocket连接将立即失败,并且没有规范的方法来检测它.
| 归档时间: |
|
| 查看次数: |
41786 次 |
| 最近记录: |