打开端口3000 EC2亚马逊网络服务

时间:2013-10-12 17:41:41

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

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

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

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

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

由于

5 个答案:

答案 0 :(得分:10)

  

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进行传入访问。
  4. 请遵循以上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。那为我修好了。