如何在同一个弹性beantalk实例上运行socket.io和表达?
Posted
技术标签:
【中文标题】如何在同一个弹性beantalk实例上运行socket.io和表达?【英文标题】:How to run socket.io and express on the same elastic beanstalk instance? 【发布时间】:2015-08-21 09:56:53 【问题描述】:我们有弹性 beanstalk 实例,我们也有一些休息服务和 socket.io。 express 正在通过端口 80 启动。我在 3001 启动了 socket.io。但无法连接此套接字。我还关闭了代理,从 nginx 到关闭。 套接字代码如下
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io')(server), //make sockets
port = 3001;//port for socket
//initiate server
server.listen(port, function ()
console.log('Socket.io listening at port %d', port);
);
【问题讨论】:
【参考方案1】:默认情况下,弹性 beanstalk 实例前面有一个未配置为允许 webSockets 的 nginx 代理。您可以关闭代理,也可以将 nginx 实例配置为支持 webSockets。
an article 描述了如何在代理中启用对 webSockets 的支持。
还有,这里有两篇文章描述了完全禁用代理 here 和 here。
而且,即使是关于同一主题的 *** 问题/答案:
Websockets with socket.io on AWS Elastic Beanstalk
【讨论】:
但是我已经关闭了 nginx 代理。 如何关闭 nginx? @DanielvanFlymen - 此处描述:docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 您不能对 Docker 实例执行此操作:/ @DanielvanFlymen - 然后给自己写一个新问题并描述你要解决的整个问题。【参考方案2】:我也遇到了这个问题。现在与:
在 Elastic Beanstalk 上:Nginx 已关闭(虽然上面的解决方案应该可以,只是想一步一步来)。
在 Elastic Beanstalk 上:负载均衡器,如下所示: https://i.ibb.co/Lp7P9fT/Screen-Shot-2019-10-07-at-2-48-02-PM.png (还不能发帖,声望太低了)
在节点/Express 中:const io = require('socket.io')(3030)
客户端:let connection = io(https://www.myurl.com:3030)
【讨论】:
【参考方案3】:我不能肯定地说,但我认为您的安全组上没有打开端口 3001。您必须允许 eb 应用程序的 ec2 sg 端口 3001 上的流量,以便您的 elb 应用程序的 ELB 可以访问。此外,请确保您配置了 ELB 的 SG,以便互联网上的任何人都可以通过 ELB 访问 EC2 实例上的 socket.io 端口。但是,您需要使用基于 TCP 的侦听器并启用代理协议才能使 socket.io 正常工作。我没有检查这一点,但我认为您不能在侦听器部分配置端口 3001。在这种情况下,您可以使用 nginx 并配置上游和位置块,以便您发送请求以纠正上游。您可以查看基于 .ebextensions 的配置,以便在部署期间适当地替换 nginx 配置。这样做的缺点是您的脚本可能需要随着弹性 beanstalk 解决方案堆栈的升级而更改。
【讨论】:
【参考方案4】:在 .ebextensions 中创建一个新的配置文件。
添加这个:
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
【讨论】:
您可以通过 aws 控制台给出步骤吗?【参考方案5】:这是安全限制的问题。否则代码工作正常。谢谢大家的帮助。
【讨论】:
您能否提供更多信息,说明问题所在以及您是如何解决的?以上是关于如何在同一个弹性beantalk实例上运行socket.io和表达?的主要内容,如果未能解决你的问题,请参考以下文章
如何在弹性 beantalk 配置上运行 wget cron 命令
如何修复弹性beantalk实例上的“使用这些代码失败的健康检查:”?
如何在 .ebextensions 文件夹中为弹性 beantalk 运行命令行命令?