【问题标题】:AWS EC2 instance connection refused on port 8085AWS EC2 实例连接在端口 8085 上被拒绝
【发布时间】:2021-11-27 22:47:43
【问题描述】:

我在 AWS 中有一个新的 EC2 实例,我也在其中托管了一个网页。我将实例关联到一个安全组,并且一些规则起作用(如连接到 mysql 或 vesta)。我用 nodeJS 创建了一个简单的服务器,我想监听来自端口 8085 的请求(我可以选择任何一个......)。我在安全组里创建了一个入站规则监听8085端口,好像是想监听,但是连接被拒绝:因为被拒绝,我认为不是安全组问题。

这是入站安全规则:

我试过其他帖子提到“netstat -a -n | grep 8085”和“netstat -an | grep 8085”,但我什么也没得到 "

我什至禁用防火墙以防万一

这是我创建服务器的代码

    const express = require('express');

    const app = express();
    
    const PORT = 8085;
    
    app.get('/', (req, res) => {
      res.send("testing");
    });
    
    app.listen(PORT, () => {
      console.log(`Server running at: http://localhost:${PORT}/`);
    });

当我运行它时,我在控制台中看到“服务器在 http://localhost:8085/ 运行”,但是当我在浏览器中输入 IP 地址:8085 时,我得到了无法访问站点。 (端口没有监听)

我做错了什么?

【问题讨论】:

  • 如果您登录实例并尝试连接到localhost:8085,是否有效? (例如curl localhost:8085
  • 当我在我的实例中从控制台运行 localhost:8085 时,我得到“无法连接到 localhost 端口 8085:连接被拒绝”
  • 这表明该端口上没有运行任何东西,或者 实例内 中的某些东西阻止了访问。该问题与实例“外部”的任何内容(例如安全组)无关。首先尝试通过localhost:8085 使其工作,然后尝试使其在实例外部工作。
  • 当我在控制台输入 [curl localhost:8085] 或 [curl localhost:80] 或任何其他端口(包括正在工作的端口)时,总是会收到相同的响应:[curl: (7 ) 无法连接到 localhost 端口...]

标签: javascript node.js amazon-ec2 server port


【解决方案1】:

我不是一个 telnet 人,所以也许我错过了一些东西。 您确实与机器建立了连接,否则您会收到超时错误,因此您的安全组没问题。 但请注意,您正在侦听 http 请求。正如我之前所说,我不是 telnet 人,但我不认为您在终端中使用 http 协议,正如 @EdsonCSouza 所提到的。尝试使用 curl 看看你会得到什么。

【讨论】:

  • 我还是不完全明白,但你是对的。从控制台,使用 telnet 我得到端口被拒绝,而使用 netstat 我没有看到端口 8085 正在监听,但是如果我在浏览器中输入带有 http 而不是 https 的地址,它可以工作!
  • Http 是一个基于 TCP 的协议,它在 OSI 模型上处于应用层。一旦您使用 http 协议发送数据,http 就会对其进行编码并将其传递给表示层等等。一旦它到达服务器,服务器就会使用 http 协议规则将其解码回来。由于该消息一开始不在 http 中,因此无法对其进行解码并引发错误。正如我上面的那个人所写,你应该使用 curl 并且它会起作用。
  • 但是当我在控制台中使用curl localhost:8085 时,我收到消息连接被拒绝
  • curl http://localhost:8085 怎么样 curl 会尝试从dns:port 猜测协议,它可能不会猜测为 http。顺便说一句,您是否检查过是否有其他软件正在使用此端口?
  • curl http://localhost:8085 , curl http://localhostcurl localhost 也给我一个(7) Failed to connect to localhost port 8085 (or 443 in the case of just localhost): Connection refused。但是,当我在控制台中输入 curl primerproyecto.ga 时,它确实可以显示 html。
【解决方案2】:

您的代码似乎没问题。 我在这里测试过,您的安全组似乎也不错... 当您检查端口是否正在侦听时,您能否检查节点进程是否正在运行? 从您提供的信息中看不清楚。

【讨论】:

  • 节点进程正在运行,因为我在控制台中得到“服务器运行在localhost:8085”。端口没有监听。我知道,因为当我运行 telnet 3.16.245.82 8085 时,连接被拒绝。我不知道为什么连接被拒绝,我也不知道有什么替代方法。
  • 运行什么命令来启动节点进程?
【解决方案3】:

另一个缺失的是 VESTA 中的防火墙。我又做了所有的事情,直到我配置它才起作用。

【讨论】:

    【解决方案4】:

    您还可以检查您的 VPC 的网络访问控制列表 (ACL) 吗? 可能有一个明确的拒绝可能会阻止这个 Network ACLs

    【讨论】:

    • 这是一个很好的观点,但看起来 AWS 为 VPC 提供了它。我有一个 VPS,我不知道你是否可以在 AWS 中为 VPS 启用 ACL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 2020-01-03
    相关资源
    最近更新 更多