如何在同一个弹性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 运行命令行命令?

如何在自动缩放的弹性 beantalk 实例中更新文件

PHP-如何在不重新启动 rds 的情况下将 aws.push git 到弹性 beantalk?

Jenkins 部署到弹性 beantalk