Node.js Amazon EC2 示例网络服务器 - 没有结果

Chr*_*ang 1 amazon-ec2 node.js

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

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

Ste*_*pel 5

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

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/');
Run Code Online (Sandbox Code Playgroud)

您会收到类似这样的消息服务器在http运行:// 127.0.0.1:1337 / -的强调部分是这里的关键,即服务器已配置为监听IP地址127.0.0.1(又名本地主机只) ,而您正试图通过您的弹性 IP 地址浏览它。

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


变化

或者,您可以改用公共/外部 DNS 名称,它根据 DNS 查询的来源展示鲜为人知的动态 IP 地址解析,请参阅例如为什么我有两个 IP 地址和两个主机名?

外部 DNS 名称(看起来像 ec2-72-44-45-204.compute-1.amazonaws.com)解析为 Amazon EC2 网络外部的实例的公共 IP 地址和 Amazon EC2 网络内部的私有 IP 地址.

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

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

但请注意,在高级场景中这可能并不总是正确的事情,因为在最近在虚拟私有云 (VPC) 中引入弹性网络接口 (ENI)之后,实际上可能有多个网络接口可用,其中是给你创造更多的埃尼斯和第二ENI连接到一个实例的能力(再次,这是VPC内)

  • @ChristianStrang:你应该能够简单地[省略地址](http://nodejs.org/docs/latest/api/http.html#server.listen),让nodejs监听所有(本地和外部)地址 - 即:`http.createServer(...).listen(1337);` 这可能是实用的,因为只有一个外部接口,你的内部 IP 可能会改变。 (2认同)