【发布时间】:2017-05-13 08:07:42
【问题描述】:
我目前有一个 EC2 实例启动并运行 Amazon Linux,并使用 FileZilla 通过 SFTP 将我的项目(包含 React/NodeJS/Express)转移到 EC2 实例上。
对于 EC2 的安全组,我为 3000 开放了一个端口(协议:tcp,源:0.0.0.0/0),这也是我的 Express 的定义方式。
所以我 sshed 到 EC2 实例并运行项目的 Express,并看到它在终端内侦听端口 3000。但是,一旦我使用ec2...us-west-1.compute.amazonaws.com:3000 访问公共 DNS,它就会显示无法访问该站点 - ec2...us-west-1.compute.amazonaws.com 响应太迟了。
可能是什么问题,我该如何从这里连接到它?
在此先感谢您,并将投票/接受答案。
【问题讨论】:
-
你能显示一些你的 Express 服务器启动的日志行吗?
sudo netstat -tulpn | grep :3000的输出显示了什么?您的实例是位于公共子网中还是必须通过堡垒访问它? -
@birryree 我只是在项目文件夹中执行
npm run server,然后我从我的项目中获得了一个正在监听端口3000 的日志。你建议并得到的命令是:tcp 0 0 :: :3000 :::* LISTEN 23569/node。抱歉,我如何检查它是在公共子网中还是通过堡垒访问?我只是通过终端进入它。 -
netstat输出看起来不错。至于它是否在公共子网中 - 听起来像是因为您可以直接通过 SSH 进入它。如果它不在公共子网上,您将无法在不通过另一个节点的情况下连接到机器(基本上,通过 SSH 连接到另一个实例,然后通过该实例连接到您的 Express 应用程序实例)。除了部署应用程序和安全组之外,您是否配置了其他任何东西?你设置iptables了吗?如果你在本机本地运行curl http://127.0.0.1:3000,是否有效? -
肯定在实例上 - 听起来它好像在回应你。在您自己的计算机上,您必须执行
curl http://ec2...us-west-1.compute.amazonaws.com:3000(无论您的公共 DNS 名称是什么)。其他一切似乎都还好,所以除了再次仔细检查您的实例的安全组之外,我不知道还有什么问题。 -
@LoganPickup 在安全组的入站选项卡下,端口 3000 设置为类型:自定义 TCP 规则和源:自定义:0.0.0.0/0,出站选项卡只有类型:所有流量,协议:全部,端口范围:全部,目的地:0.0.0.0/0。设置正确吗?
标签: node.js linux amazon-web-services express amazon-ec2