【问题标题】:AWS EC2 Error: The site can't be reached - ec2.us-west-1.compute.amazonaws.com took too late to respond. Deploy NodeJSAWS EC2 错误:无法访问该站点 - ec2.us-west-1.compute.amazonaws.com 响应时间太晚。部署 NodeJS
【发布时间】: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


【解决方案1】:

您可能会遇到出站流量问题。您可能在公司的网络中,无论是物理连接还是 VPN 接入。在某些情况下,您的 VPN 未设置为处理拆分流量,因此您必须遵守公司的出站限制。

在这种情况下,您可能希望使用代理来访问您的网站。锁定您的安全组时,请确保您使用代理的公共 IP(而不是您公司的)。

【讨论】:

    【解决方案2】:

    通常,当我们遇到连接问题时,它是基本问题或防火墙。我假设您已经检查了防火墙是否在任一端运行,例如。 iptables -L -n。此外,任何协议分析器(如 wireshark 或 tcpdump)都会告诉您到端口 3000 的数据包在哪里可见。

    【讨论】:

    • 我还没有检查,但会做iptables -L -n,告诉我?您还可以详细说明知道到端口 3000 的数据包在哪里可见吗?
    • 防火墙是通过 iptables 条目实现的。数据包可能会在您的 2 个端点之间的任何地方丢失。知道数据包到达远端会丢弃一半可疑的路径。这是我们日复一日的工作。
    • 知道了。那么我该如何测试它们呢?
    【解决方案3】:

    只需检查您的 Node.js 服务器是否在 EC2 实例上运行。

    调试:

    1. 首先检查它是否在本地正常工作。
    2. 检查 EC2 中的 node.js 服务器。
      • sudo netstat -tulpn | grep :3000
    3. 尝试使用 --verbose 标志运行服务器,即npm run server --verbose
      • 它会在启动时显示服务器的日志。
    4. 检查 EC2 实例的安全组设置。
    5. 尝试连接 ip:port 即 35.2..:3000

    如果仍然无法正常工作并且响应需要很长时间。 这意味着其他一些服务正在同一端口上运行。

    在 ec2 中试试这个:

    sudo killall -9 node 
    npm run server
    

    并使用 IP(54.4.5.*:3000) 或 公共 DNS (@ 987654321@).

    希望它会有所帮助:)

    【讨论】:

    • 使用本地主机,它工作正常。然后我 sshed 到 EC2,并做了npm run server --verbose,它只是记录了:npm info it worked if it ends with ok, npm verb cli [ '/usr/local/bin/node', ...], npm info using npm@3.10.9, npm info using node@v6.9.2, npm verb run-script ['preserve', 'serve', 'postserve'], npm info lifescycle prod_project...。然后对于sudo netstat -tulpn | grep :3000,我得到了tcp 0 0 :: :3000 :::* LISTEN 1071/node。
    • 在安全组的入站选项卡下,端口 3000 设置为类型:自定义 TCP 规则和源:自定义:0.0.0.0/0,出站选项卡只有类型:所有流量,协议:全部,端口范围:全部,目的地:0.0.0.0/0。是否设置正确?而 35.2..:3000 刚刚返回 response taking long time.
    • 试试这个``` sudo killall -9 node ``` npm run server
    • 试过但仍然得到相同的响应:response taking long time。
    • 可能还有其他选择吗?
    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 2021-06-01
    • 2017-05-24
    • 1970-01-01
    • 2016-04-30
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多