![EC2 端口 80 拒绝连接公共 IP,但可以使用私有 IP 连接](https://linux22.com/image/786814/EC2%20%E7%AB%AF%E5%8F%A3%2080%20%E6%8B%92%E7%BB%9D%E8%BF%9E%E6%8E%A5%E5%85%AC%E5%85%B1%20IP%EF%BC%8C%E4%BD%86%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E7%A7%81%E6%9C%89%20IP%20%E8%BF%9E%E6%8E%A5.png)
问题简化
我可以这样做curl {publicip}:4321
,但不能curl {publicip}:80
。curl {publicip}
但从服务器的 ssh,我可以运行curl {privateip}:80
,curl localhost:80
没有任何问题。此外,端口 80 和端口 4321 都已添加到安全组中的入站规则。为什么会这样?
故事
我是 AWS EC2 的新手。我最近创建了一个 EC2 t4g nano 实例,并使用 PM2 运行了一个 NodeJS 服务器。该服务器监听端口 4321。然后使用 iptables,我将端口 80 重定向到端口 4321。然后在安全组中,我添加了从“任意 IP”到端口 80(HTTP)的入站规则。
一切正常,我能够使用实例的公共 IP 连接到服务器,直到今天早上,我突然无法通过 SSH 连接到服务器。AWS 控制台中的实例状态显示为“正在运行”,但在状态检查中,1/2 未成功。它显示“实例可达性失败”。然后,我尝试重新启动实例,它成功了,然后我可以通过 SSH 连接到它。
现在,我重新启动了 PM2,然后再次将重定向规则添加到 iptables。但是现在,我无法使用公网 IP 连接到端口 80。
我可以运行curl localhost:80
,curl {privateip}:80
它连接没有任何问题。当我运行curl {publicip}:80
或 时,curl {publicip}
它显示“连接被拒绝”。正如我所说,端口 80 已经存在于安全组的入站规则。
我将端口 4321 添加到安全组的入站规则中,使用 可以毫无问题地进行连接,curl {publicip}:4321
但不能curl ${publicip}:80
。这怎么可能?我遗漏了什么吗?