16

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

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

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

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

谢谢

4

6 回答 6

12

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

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

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

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

按着这些次序:

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

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

于 2013-10-13T16:23:52.460 回答
6

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

检查您是否正在运行 ufw:

sudo ufw status

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

sudo ufw allow 3000

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

于 2017-11-08T06:35:39.530 回答
2

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

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

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

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

于 2013-10-12T22:18:45.713 回答
1

有类似的问题,但我使用的是带有 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 clear 和 nginx 提供了客户端 js 文件,请求仍然关闭。所以在 Firefox 中我得到了 net::ERR_CONNECTION_CLOSED 并最终发现它可能是 SSL 故障。

于 2014-10-31T13:24:40.857 回答
0

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

那是错误的。删除该行,只需为 IPv4 和 IPv6 的端口 3000 设置两个自定义 TCP。那为我修好了。

于 2021-07-13T21:02:34.147 回答
0

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

Secure groups通过向IPv4 和 IPv6添加 3000 端口并设置hostnuxt.config.js“0.0.0.0”解决了问题。这个值使 Nuxt 自动寻找“真实”的 ip 监听。

于 2022-01-05T11:46:10.877 回答