【问题标题】:amazon beanstalk tcp app not responding亚马逊 beanstalk tcp 应用程序没有响应
【发布时间】:2016-04-03 05:18:10
【问题描述】:

我正在我的 aws linux ec2 实例上运行 nodejs tcp 应用程序。基本代码如下

var net = require('net');
net.createServer(function(socket){
socket.write('hello\n');

socket.on('data', function(data){
    socket.write(data.toString().toUpperCase())
  });
}).listen(8080);

它的运行就像魅力一样,但我想在 aws beanstalk 上运行同样的应用程序(只是为了获得自动缩放的好处)。是的,我不是aws ninja。顺便说一句,我在 beanstalk 上获取公共 ip,我使用 aws VPC。

  1. beanstalk 应用程序连接到 VPC = 已选中。
  2. VPC 8080 端口打开 = 已检查。
  3. 将硬编码端口 8080 更改为 process.env.PORT = 检查。

但如果我在端口 8080 上 ping 任何东西,它不会从应用程序返回“你好”。我错过了什么?

【问题讨论】:

    标签: node.js amazon-web-services tcp amazon-elastic-beanstalk amazon-vpc


    【解决方案1】:

    您的应用程序未实现 HTTP。默认情况下,ElasticBeanstalk 会将弹性负载均衡器 (ELB) 配置为充当 HTTP 负载均衡器。这意味着您的实例不健康,ELB 没有投入使用,ELB 本身也会拒绝非 HTTP 请求。

    重要提示: 虽然可以修改 ElasticBeanstalk 以适用于您的用例,但您将以非标准方式使用它,因此会有一些风险.如果您经常使用 CloudFormation 或 API 创建和删除环境,那么您可能会遇到很多麻烦。

    如果您只想创建一个环境并让它运行,那么我建议您采取以下步骤。

    首先,ElasticBeanstalk 的 nodejs 配置将在 EC2 实例上配置 Nginx 服务器,因为您使用的是 TCP,所以您需要完全绕过它。这可以通过重新配置 ELB 和安全组来完成。让 Nginx 运行是最简单的,它不会被使用,只要确保它与 nodejs 不在同一个端口上。

    默认情况下,ELB 配置如下所示:

    您错过的步骤是更新 ELB 以在适当的端口上使用 TCP 负载平衡。您可以进入负载均衡器下的 EC2 Web 控制台并更新已创建的 Beanstalk 的负载均衡器配置,如下所示:

    您还需要将负载均衡器的健康检查修改为在正确的端口上:

    最后,仔细检查以确保负载均衡器和 EC2 实例的安全组允许访问适当的端口。最后要检查的是,但您已经提到您查看了,您的 VPC 的 NACL 还允许访问适当的端口。

    【讨论】:

      猜你喜欢
      • 2017-01-14
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多