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