【问题标题】:Can't connect to Node web-server hosted on Amazon EC2无法连接到托管在 Amazon EC2 上的 Node Web 服务器
【发布时间】:2017-12-13 10:42:25
【问题描述】:

我在 Amazon EC2 上运行节点应用程序。该应用程序包含一个简单的 Web 服务器,旨在为索引页面提供服务,但它不起作用。

这是服务器代码:

var http = require('http'),
fs = require('fs'),
io = require('socket.io'),
index;

fs.readFile('client.html', function(err, data){
    if (err){
        throw err;
    }
    index = data;
});

var server = http.createServer(function(request, response){
    response.writeHeader(200,{"Content-Type": "text/html"});
    response.write(index);
    response.end();
}).listen(1223);

EC2 被分配了公共 IP 地址54.187.31.42。我运行该应用程序,打开浏览器,连接到 54.187.31.42:1223,期望得到一个网页,但什么也得不到。

  1. 我的服务器代码有什么问题?

  2. 我使用this answer中的sn-p检查运行应用程序的EC2的IP,奇怪的是得到172.31.3.67 - 为什么返回的地址与亚马逊分配给机器的地址不同?

因此,尝试连接到 172.31.3.67:1223 也会失败。


直接来自亚马逊开发控制,如果这有助于确认这不是服务器 IP 错误或其他问题。

【问题讨论】:

  • 你的终端或页面是否有错误信息?
  • 不,控制台中没有任何连接尝试的迹象。

标签: node.js amazon-web-services amazon-ec2 webserver


【解决方案1】:

代码看起来不错,请尝试使用您在 AWS 控制台中看到的公共 IP/公共 DNS 进行连接。

尝试以下操作,您的应用程序将正常运行:

  1. 在您的实例的安全组中打开端口(在您的情况下为 1223)。
  2. 停止您机器上的防火墙(即 iptables),现在使用公共 ip 或公共 DNS 访问您的服务器。

如果您现在可以访问您的计算机,则意味着 iptables 中的某些内容正在过滤您的流量。您可以相应地修改 iptables 规则。

【讨论】:

  • 正是问题所在!我更改了安全组以允许所有端口上的所有内容,现在它可以工作了。谢谢你。现在,通过允许一切而不是特定于安全组,我会给自己带来什么问题?这是我应该注意,研究,然后正确配置的东西吗?
  • 嘿,您不需要允许所有端口上的所有内容。只需打开您的应用程序接受连接的端口,在您的情况下是 1223,对吗?
  • 嗯,有很多不同类型的连接可以允许端口打开,这是第一种有效的方法。当然,我计划了解不同连接类型的含义并进行相应配置,因此我的评论中的问题
  • 允许端口号 1223 上的“自定义 tcp”流量,仅此而已。它应该也可以工作。
【解决方案2】:

在安全组中,在使用的端口上添加一个类型为“自定义 TCP 规则”的规则(例如,在这种情况下,端口:3000 或 1223)。它对我有用。

【讨论】:

    猜你喜欢
    • 2018-03-23
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多