【问题标题】:Opening port 3000 EC2 Amazon web services打开端口 3000 EC2 亚马逊网络服务
【发布时间】:2013-10-20 15:52:53
【问题描述】:

我正在尝试使用 nodejs 和 socket.io 来交付一个 webapp,它在端口 3000 上使用 websocket。

我已通过将入站 TCP 规则添加到相关安全组,在我的管理控制台中打开我的 EC2 实例上的端口 3000,但是我仍然无法通过浏览器上的公共 dns 访问它。

sudo netstat -tulpn 不会将其显示为开放端口。

我错过了什么?是否需要重新启动某些服务或需要推送命令行以使其运行?

谢谢

【问题讨论】:

  • 这个问题解决了吗?我在互联网上四处寻找无济于事。我最终在我的 nodejs 应用程序中使用端口 8080 而不是 3000,这解决了我的问题。但是为什么世界上的 3000 端口不起作用呢?

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


【解决方案1】:

sudo netstat -tulpn 不会将其显示为开放端口。

netstat 命令将显示“某些”进程正在侦听的所有端口。所以在这种情况下,正如您所提到的,您的应用程序似乎没有在端口 3000 上侦听。

首先,修复您的应用程序并确保它正在侦听端口 3000。

另外,netstat 与从防火墙的角度来看端口是否打开/关闭无关。它会通过某个进程告诉您给定端口是否处于LISTENING 模式。

按照以下步骤操作:

  1. 确保您的应用程序正在侦听端口 3000: netstat -anp | grep 3000 还有telnet 127.0.0.1 3000
  2. 然后确保将本地防火墙配置为允许对端口 3000 的传入访问 或禁用本地防火墙进行快速测试 (service iptables stop)。对于 linux,它通常是 iptables
  3. 允许传入访问您的 AWS 安全组中的端口 3000。

请遵循以上 3 点,如果您仍然遇到同样的问题,请告诉我们。

【讨论】:

    【解决方案2】:

    除了上述所有步骤之外,请检查您是否设置了 ufw(简单防火墙)。

    检查你是否有 ufw 正在运行:

    sudo ufw status
    

    如果它正在运行, 允许端口 3000 只需执行命令

    sudo ufw allow 3000
    

    这解决了我的问题。我忘了我之前已经设置了 ufw,最近又开始使用我的 aws 实例了。

    【讨论】:

      【解决方案3】:

      我猜您使用 AWS 管理控制台进行了更改。 但这只是意味着亚马逊的系统将允许端口 3000 上的消息通过他们自己的安全系统发送到您的服务器。

      您的 EC2 服务器(您没有说是 Windows 还是 Linux)可能有自己的防火墙系统,您必须在其上打开端口 3000。您必须查看您的服务器的文档以了解需要更改的设置。

      我假设您已尝试在您的 EC2 实例上打开浏览器,并且您可以从那里访问 Web 应用程序。

      另外,横向思考,如果您的 EC2 服务器上没有运行其他 Web 服务器,为什么不将您的 node.js Web 应用程序更改为使用端口 80?

      【讨论】:

        【解决方案4】:

        有类似的问题,但我使用的是带有 SSL 的 socketio

        var https = require('https').Server({
            key: fs.readFileSync(path.join(__dirname + '../) + 'ssl.key', 'utf8'),
            cert: fs.readFileSync(path.join(__dirname + '../') + 'ssl.crt', 'utf8')
        }, app);
        

        但是密钥是错误的,所以即使我的 AWS 安全性已经完成,iptables 清晰并且 nginx 提供了客户端 js 文件,请求仍然关闭。所以在 Firefox 中我得到了 net::ERR_CONNECTION_CLOSED 并最终发现它可能是 SSL 故障。

        【讨论】:

          【解决方案5】:

          我希望这对某人有所帮助。我遵循了一个在线教程,说我应该为 3000 TCP 添加安全规则并链接回source 中的安全组标识符。

          错了。删除该行,然后为 IPv4 和 IPv6 的端口 3000 设置两个自定义 TCP。这为我解决了问题。

          【讨论】:

            【解决方案6】:

            让我把我的几美分放在这里。

            通过将 3000 端口添加到具有 IPv4 和 IPv6 的 Secure groups 以及将 nuxt.config.js 中的 setting host 添加到“0.0.0.0”来解决问题。该值使 Nuxt 自动寻找“真实”的 ip 监听。

            【讨论】:

              猜你喜欢
              • 2011-06-27
              • 2013-09-28
              • 2010-12-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多