nur*_*azi 5 tcp amazon-web-services node.js amazon-vpc amazon-elastic-beanstalk
我正在我的 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);
Run Code Online (Sandbox Code Playgroud)
它的运行就像魅力一样,但我想在 aws beanstalk 上运行这个相同的应用程序(只是为了获得自动缩放的好处)。是啊,我不是 AWS 忍者。顺便说一句,为了获取 beanstalk 的公共 IP,我使用 aws VPC。
但如果我在端口 8080 上 ping 任何内容,它不会从应用程序返回“hello”。我缺少什么?
您的应用程序未实现 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 还允许访问适当的端口。
归档时间: |
|
查看次数: |
1312 次 |
最近记录: |