我正在尝试使用 nodejs 和 socket.io 来提供一个 webapp,它在端口 3000 上使用 websocket。
通过将入站 TCP 规则添加到相关安全组,我在管理控制台中的 EC2 实例上打开了端口 3000,但是我仍然无法通过浏览器上的公共 dns 访问它。
sudo netstat -tulpn 不会将其显示为开放端口。
我错过了什么?是否需要重新启动某些服务或需要推送命令行以使其运行?
谢谢
我正在尝试使用 nodejs 和 socket.io 来提供一个 webapp,它在端口 3000 上使用 websocket。
通过将入站 TCP 规则添加到相关安全组,我在管理控制台中的 EC2 实例上打开了端口 3000,但是我仍然无法通过浏览器上的公共 dns 访问它。
sudo netstat -tulpn 不会将其显示为开放端口。
我错过了什么?是否需要重新启动某些服务或需要推送命令行以使其运行?
谢谢
sudo netstat -tulpn 不会将其显示为开放端口。
netstat 命令将显示“某些”进程正在侦听的所有端口。因此,在这种情况下,正如您所提到的,您的应用程序似乎没有在端口 3000 上侦听。
首先,修复您的应用程序并确保它正在侦听端口 3000。
此外,netstat
从防火墙的角度来看,与端口是否打开/关闭无关。它会告诉您给定端口是否LISTENING
通过某个进程处于模式。
按着这些次序:
netstat -anp | grep 3000
也telnet 127.0.0.1 3000
service iptables stop
)。对于 linux,它通常iptables
请遵循以上 3 点,如果您仍然面临同样的问题,请告诉我们。
除了上述所有步骤之外,请检查您是否设置了 ufw(简单防火墙)。
检查您是否正在运行 ufw:
sudo ufw status
如果它正在运行,允许端口 3000 只需执行命令
sudo ufw allow 3000
这为我解决了问题。我忘记了我之前设置了 ufw,最近又开始使用我的 aws 实例。
我猜您使用 AWS 管理控制台进行了更改。但这仅仅意味着亚马逊的系统将允许端口 3000 上的消息通过他们自己的安全系统发送到您的服务器。
您的 EC2 服务器(您没有说是 Windows 还是 Linux)可能有自己的防火墙系统,您必须在其上打开端口 3000。您将不得不查看您的服务器的文档以了解您需要更改的设置。
我假设您已经尝试在您的 EC2 实例上打开浏览器,并且您可以从那里访问 Web 应用程序。
此外,横向思考,如果您的 EC2 服务器上没有运行其他 Web 服务器,为什么不将您的 node.js Web 应用程序更改为使用端口 80?
有类似的问题,但我使用的是带有 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 故障。
我希望这对某人有所帮助。我遵循了一个在线教程,该教程说我应该为 3000 TCP 添加安全规则并链接回source
.
那是错误的。删除该行,只需为 IPv4 和 IPv6 的端口 3000 设置两个自定义 TCP。那为我修好了。
让我把我的几美分放在这里。
Secure groups
通过向IPv4 和 IPv6添加 3000 端口并设置host
为nuxt.config.js
“0.0.0.0”解决了问题。这个值使 Nuxt 自动寻找“真实”的 ip 监听。