亚马逊豆蔻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。
- 豆荚应用程序连接到VPC =检查。
- VPC 8080端口打开=已检查。
- 将硬编码端口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如下所示:
您错过的步骤是更新ELB以在相应的端口上使用TCP负载平衡。 您可以进入Load Balancers下的EC2 Web控制台,并将已创build的Beanstalk的负载均衡器configuration更新为如下所示:
您还需要将负载平衡器的运行状况检查修改为正确的端口:
最后,仔细检查以确保负载均衡器和EC2实例的安全组允许访问相应的端口。 最后一件要检查的事情,但是你已经提到你看,是你的VPC的NACLs也允许访问适当的端口。