amazon beanstalk tcp app无响应

时间:2015-12-29 10:26:18

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

我在我的aws linux ec2实例上运行了一个nodejs tcp app。基本代码如下:

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上运行这个相同的应用程序(只是为了获得自动缩放的好处)。你好,我不是忍者。顺便说一句,在beanstalk获取公共ip,我使用了aws VPC。

  1. beanstalk app连接到VPC =已检查。
  2. VPC 8080端口打开=已检查。
  3. 将硬编码端口8080更改为process.env.PORT = checked。
  4. 但如果我在8080端口ping任何东西,它就不会返回'你好'从申请。我错过了什么?

1 个答案:

答案 0 :(得分:3)

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

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

如果您打算创建一个环境并使其保持运行,那么我建议您采取以下步骤。

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

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

Standard ELB Configuration for nodejs Beanstalk Application

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

TCP Configuration for nodejs Beanstalk App

您还需要将负载均衡器的运行状况检查修改为正确的端口:

enter image description here

最后,仔细检查以确保负载均衡器和EC2实例的安全组允许访问相应的端口。最后要检查的是,你已经提到过,你的VPC的NACL也允许访问相应的端口。