4

我在aws linux ec2實例上運行nodejs tcp應用程序。基本代碼下面給出亞馬遜豆稈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 VPC獲得公共ip。

  1. beanstalk應用程序連接到VPC =檢查。
  2. VPC 8080端口打開=已檢查。
  3. 將硬編碼端口8080更改爲process.env.PORT =已檢查。

但如果我在端口8080 ping任何東西,它不會從應用程序返回'你好'。我錯過了什麼?

回答

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負載上的相應端口平衡。你可以進入下負載平衡器的EC2 Web控制檯和更新已創建的魔豆負載平衡器配置看起來像這樣:

TCP Configuration for nodejs Beanstalk App

你也將要修改的負載均衡的健康檢查是正確的端口上:

enter image description here

最後,仔細檢查,以確保兩個負載平衡器和EC2實例安全組允許訪問相應的端口。要檢查的最後一件事,但你已經提到你看,是你的VPC的NACL也允許訪問適當的端口。