AWS弹性魔豆与ALB:节点的WebSocket超时
我读过一些博客文章,并跟着他们如何获得节点的WebSockets与AWS弹性魔豆(EB)使用应用负载平衡器(ALB)工作的指令 - 无济于事。
本地(localhost
)使用时,应用程序工作正常使用WebSockets。
在EB,应用正确加载和浏览器显示,但WebSocket的不连接,并最终超时。
WebSocket connection to 'ws://tradey-12-hr-dev.ap-northeast-1.elasticbeanstalk:3030/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT
按照该博客文章中,我提出了以下我除了在.ebextensions/enable-websockets.config
应用程序:
container_commands:
enable_websockets:
command: |
sed -i '/\s*proxy_set_header\s*Connection/c \
proxy_set_header Upgrade $http_upgrade;\
proxy_set_header Connection "upgrade";\
' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
下面是建立WebSocket的后端代码。使用的端口是在这两个BE和FE 3030
。
import WebSocket from 'ws'
const setUpWebsocketServer = port => new WebSocket.Server({ port })
export default setUpWebsocketServer
这里是发起握手前端代码:
const target = window.location.host === 'localhost:3000' ?
'localhost' : window.location.host
const ws = new WebSocket(`ws://${target}:${PORT}`)
这里是最后100行日志的链接。未产生任何错误:
我希望这是小东西,我的直觉告诉我,我必须允许通过安全组什么的流量端口3030
- 我甚至对所有安全组允许从“任何地方”的交通创造了新的入站交通规则,但这也没有工作(见附件图片)。
感谢您的帮助提前=)
回答如下:我想到了。 ALB只支持HTTP,TCP没有。真正的WebSockets(例如NPM WS库)运行在TCP,所以他们不会与ALB工作。要么你可以使用带有ELB或回落到长轮询像Socket.io与ALB库真正的WebSockets。我写了一个完整的博客张贴这件事,你可以在这里阅读:https://medium/@binyamin/node-websockets-with-aws-elastic-beanstalk-elastic-load-balancer-elb-or-application-load-6a693b21415a
AWS弹性魔豆与ALB:节点的WebSocket超时
我读过一些博客文章,并跟着他们如何获得节点的WebSockets与AWS弹性魔豆(EB)使用应用负载平衡器(ALB)工作的指令 - 无济于事。
本地(localhost
)使用时,应用程序工作正常使用WebSockets。
在EB,应用正确加载和浏览器显示,但WebSocket的不连接,并最终超时。
WebSocket connection to 'ws://tradey-12-hr-dev.ap-northeast-1.elasticbeanstalk:3030/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT
按照该博客文章中,我提出了以下我除了在.ebextensions/enable-websockets.config
应用程序:
container_commands:
enable_websockets:
command: |
sed -i '/\s*proxy_set_header\s*Connection/c \
proxy_set_header Upgrade $http_upgrade;\
proxy_set_header Connection "upgrade";\
' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
下面是建立WebSocket的后端代码。使用的端口是在这两个BE和FE 3030
。
import WebSocket from 'ws'
const setUpWebsocketServer = port => new WebSocket.Server({ port })
export default setUpWebsocketServer
这里是发起握手前端代码:
const target = window.location.host === 'localhost:3000' ?
'localhost' : window.location.host
const ws = new WebSocket(`ws://${target}:${PORT}`)
这里是最后100行日志的链接。未产生任何错误:
我希望这是小东西,我的直觉告诉我,我必须允许通过安全组什么的流量端口3030
- 我甚至对所有安全组允许从“任何地方”的交通创造了新的入站交通规则,但这也没有工作(见附件图片)。
感谢您的帮助提前=)
回答如下:我想到了。 ALB只支持HTTP,TCP没有。真正的WebSockets(例如NPM WS库)运行在TCP,所以他们不会与ALB工作。要么你可以使用带有ELB或回落到长轮询像Socket.io与ALB库真正的WebSockets。我写了一个完整的博客张贴这件事,你可以在这里阅读:https://medium/@binyamin/node-websockets-with-aws-elastic-beanstalk-elastic-load-balancer-elb-or-application-load-6a693b21415a