亚马逊豆蔻tcp应用程序没有响应

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

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

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

你的应用程序没有实现HTTP。 ElasticBeanstalk默认将configurationElastic Load Balancer(ELB)作为HTTP负载平衡器。 这意味着你的实例不健康,ELB没有投入使用,而ELB本身也会拒绝非HTTP请求。

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

如果你打算创build一个环境并让它运行,那么我build议你采取以下步骤。

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

默认情况下,ELBconfiguration如下所示:

nodejs Beanstalk应用程序的标准ELB配置

您错过的步骤是更新ELB以在相应的端口上使用TCP负载平衡。 您可以进入Load Balancers下的EC2 Web控制台,并将已创build的Beanstalk的负载均衡器configuration更新为如下所示:

nodejs Beanstalk App的TCP配置

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

在这里输入图像描述

最后,仔细检查以确保负载均衡器和EC2实例的安全组允许访问相应的端口。 最后一件要检查的事情,但是你已经提到你看,是你的VPC的NACLs也允许访问适当的端口。