Node.js Amazon EC2示例webserver – 无结果

如果我在Amazon EC2服务器上运行基本nodejs.org示例,则在控制台中显示“服务器正在运行”消息。 但是,如果我尝试在浏览器中打开它,使用我的弹性IP +端口,我没有结果。

我想我打开了TCP端口22和1337(我不是100%确定的,因为我是新手)。

大概你的意思是这个例子:

var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); 

您收到的消息就像服务器运行在http:// 127.0.0.1:1337 / – 强调的部分在这里是关键的,也就是说服务器已经被configuration为只监听IP地址127.0.0.1(又名本地主机 ) ,而你正试图通过你的弹性IP地址浏览它。

因此,您可以通过将listen()语句中的127.0.0.1replace为已分配给您的EC2实例的私有/内部IP地址来实现您的目标。


变化

或者,您可以使用公共/外部DNS名称,这取决于DNS查询的来源,显示较less的已知dynamicIP地址parsing,请参阅为什么我有两个IP地址和两个主机名? :

外部DNS名称(与ec2-72-44-45-204.compute-1.amazonaws.com类似)parsing为Amazon EC2networking外部实例的公有IP地址,以及Amazon EC2networking内的私有IP地址。

最后(根据cyberx86的评论,谢谢!),你可能完全可以省略可选的地址参数(但见下文),请参阅server.listen(port,[hostname],[callback]) :

如果主机名被省略,服务器将接受指向任何IPv4地址(INADDR_ANY)的连接。

但请注意,在高级场景中,这可能并不总是正确的,因为在最近在虚拟私有云(VPC)中引入弹性networking接口(ENI)之后,可能有多个networking接口可用, 使您能够创build额外的ENI,并将第二个ENI附加到实例(同样,这是在VPC内)