无法通过公共 ip 访问 EC2 实例上的站点

Posted

技术标签:

【中文标题】无法通过公共 ip 访问 EC2 实例上的站点【英文标题】:Can't access site on EC2 instance via public ip 【发布时间】:2012-05-02 11:12:56 【问题描述】:

我已经用 EC2 进行了几天的试验,并且一直在努力争取能够访问我托管的示例站点。堆栈是带有 Thin 和 nginx 的 Rails 3.1.3。

我尝试了几种不同的配置,最后运行了 Nginx 自动安装脚本,当我执行 curl http://ec2-107-20-143-179.compute-1.amazonaws.com/ 时,它确实返回了一个网页。但是,当我将浏览器指向那里时,它会永远挂起,然后说找不到页面。

我已经分配了一个弹性 IP 地址,并且我已经通过端口 80 启用了 HTTP 访问。

我在系统管理员方面没有太多经验,在这一点上我基本上被难住了。任何建议将不胜感激。

【问题讨论】:

我刚刚在我的 chrome 中查看了你的 url - 它对我有用 - 可能是浏览器缓存问题? 是的,它现在正在工作,大量的用户错误案例。谢谢! 【参考方案1】:

您是否为所有 ip 启用了 http 端口?这将通过以下方式完成:

EC2 -> 安全组 -> 默认(或您的客户) -> 入站

然后为 HTTP 创建一个新规则并作为源,您应该分配:0.0.0.0/0

应该可以的。

【讨论】:

我确实为 HTTP 定义了一个规则。它是 EC2 的默认设置,侦听端口 80,允许所有 IP 地址 您的网络服务器是否在监听 80 端口? 最后我使用默认安全组初始化实例——我错误地认为我已正确设置。事实上,我已经定义了一个具有适当设置的自定义组。我的愚蠢错误。【参考方案2】:

认为 AWS UI 可能已经更新,但基于 Deleteman 的回答

登录 EC2 仪表板 实例 > 实例 操作下拉菜单 > 网络 > 更改安全组 您可能会看到您只允许启动向导 1,而我只允许在端口 22 上进行 SSH 访问

正如 Deleteman 所说,您可能需要更改您的安全组...

登录 EC2 仪表板 网络和安全 > 安全组 删除搜索框中可能存在的所有过滤器以显示所有组 我个人编辑了默认 VPC 安全组,因为这对我来说是一个沙盒,我想您会想要为您的项目创建一个安全组 选中安全组复选框,选择操作下拉菜单并单击“编辑入站规则”,我使用以下入站规则以确保一切正常

当您重新访问 Instances > Instances > Description 时,您应该会看到安全组和规则

如果您对它的工作感到满意,我可能会用 HTTP 和 HTTPS 替换所有流量(如果需要的话)

【讨论】:

从“无处不在”打开所有端口是一个非常糟糕的主意。 高质量的答案,有一点我必须重新启动实例才能使新规则生效。 打开 80 端口以从“任何地方”访问通常就足够了。 HTTPS 可能是 443。 无法解释这为我节省了多少,这几天一直在寻找这个。非常感谢【参考方案3】:

我早些时候在这里寻找解决我遇到的类似问题的方法。在我的案例中,除了 EC2 安全组之外,EC2 实例还运行了自己的防火墙。命令'system-config-firewall'让我可以打开端口。默认情况下未打开端口 80 (HTTP) 和 3306 (mysql)。 22 (SSH) 已打开。我还必须执行“yum install system-config-firewall”。

总而言之,我的解决方案是:

> yum install system-config-firewall
> system-config-firewall

【讨论】:

第一个给Setting up Install ProcessNo package system-config-firewall available.Nothing to do 这正是我需要做的。 好东西,这也是我最初的问题!谢谢!! 在使用 iptables (不成功)一段时间后,这个解决了我。谢谢! 就是这样!谢谢!【参考方案4】:

此答案适用于不知道自己在使用 ec2 实例做什么的新手。

我遇到了同样的问题,尝试了所有安全组修复都无济于事。

事实证明,我需要从命令行打开我的服务器。

sudo service httpd start 

有时天很黑,不是因为保险丝熔断,而是因为你没有轻按开关。

【讨论】:

哈哈,非常感谢。我一直想知道为什么我看到 twitter bootstrap 的网站书签图标出现(提示),但网站没有加载。【参考方案5】:

我也在努力解决同样的问题,我也创建了安全组,但没有应用于实例。只需为 http 创建新规则。并从右键单击实例应用并选择安全组并分配它。

【讨论】:

我遇到了同样的问题,在阅读了这篇文章后,在我的实例设置中注意到它没有关联我的安全组。最新的 UI 有一个“操作”下拉菜单,我用它来“更改安全组” @JimClouse 谢谢,这对我来说是缺少的一步。 仪表板的方式有点令人困惑。因此,您会在左侧窗格中看到 security groups。您添加一个新的安全组assuming,您将其添加到您的实例中。这就是所有地狱都崩溃的地方。 :) 感谢@jbmyid 明确说明如何执行此操作。【参考方案6】:

我在使用 ubuntu EC2 实例时多次遇到同样的问题,在这里我添加了所有帮助我在不同情况下解决问题的方法。

    确保您正在从浏览器访问“公共 IPv4 DNS”或“公共 IPv4 地址”或“弹性 IP 地址”。

    检查 80 端口是否打开。 在这里可以看到入站规则中没有打开80端口。所以我们先打开80端口。为此,请单击 security 标签,您可以看到 Security groups 打开这个新标签 现在您必须编辑入站规则。 点击添加规则 然后选择类型 HTTP 和来源 AnyWhere 并保存。 同样,您也使用 HTTPS。

    如果 HTTPS 未启用,请检查浏览器 URL,如果我们尝试从浏览器默认访问,则可能是 HTTPS,如果是,请将其设为 HTTP 并重试。

    编辑网络 ACL。选择 Networking 标签并在新窗口中打开 Subnet ID

从 Subent Id 打开 Network ACL 在新窗口中 现在编辑入站规则。

【讨论】:

【参考方案7】:

对我来说,这就像在我的浏览器上将网址从 https://my-site 更改为 http://my-site 一样简单。 (此解决方案仅适用于仍然能够通过 SSH 连接到 ec2 实例但无法通过浏览器连接的人)

【讨论】:

【参考方案8】:

Octopus 的答案对我来说是正确的,但 Windows 机器除外。 我需要去 Windows 防火墙,如果它不匹配规则,它会阻止所有来自 VM 的流量。规则中没有启用端口 80,所以我只需要添加一个。

【讨论】:

【参考方案9】:

我太愚蠢了,因为我忘记安装 web 服务器(HTTP 服务器),因为我的 ec2 实例公共 IP 无法正常工作。回答这个问题,这也是我不应该错过的原因之一。

你可以安装任何一个,

nginx:

sudo apt-get install nginx

apache2:

sudo apt-get install apache2

【讨论】:

【参考方案10】:

我遇到了同样的问题,因为我没有使用 Ubuntu 或 linux 的经验,所以我一直在绞尽脑汁。 Parag 的回答修复了它。

我太愚蠢了,因为我忘记安装 Web 服务器(HTTP 服务器),因为我的 ec2 实例公共 IP 无法正常工作。回答这个问题,这也是我不应该错过的原因之一。

你可以安装任何一个,

nginx:

sudo apt-get install nginx

apache2:

sudo apt-get install apache2

【讨论】:

【参考方案11】:

我知道这是一个非常古老的线程,但最近在许多服务中都遇到了这个问题。当您在端口示例 3000 上运行任何应用程序服务器(如 Puma 或 Unicorn)时,没有负载均衡器或像 Nginx 前端这样的代理。您必须遵循两个步骤:

    将服务绑定到 0.0.0.0/3000 而不是 127.0.0.1/3000。(这将 让互联网上的任何人都可以访问您的服务, 也就是第 2 步进入图片)。 在 AWS 安全组中,如果需要,现在允许 0.0.0.0 的端口 3000 任何人都可以通过 Internet 访问或添加 *** 或您的网络 IP 只允许您和您的团队使用。

【讨论】:

【参考方案12】:

我的问题是浏览器。

Chrome 工作; Firefox 不工作。

【讨论】:

【参考方案13】:

当我尝试在 EC2 上运行我的 go 应用程序时,我遇到了非常相似的情况。如果您在浏览器上看不到适当的消息或结果,即使您:

可以使用curl很好地得到响应, 已正确配置安全组 为全球 80、443 或您的 IP 地址打开笔入站流量和 为 22 开放入站流量;和 为您使用的端口(如 8080、4343 等)打开入站流量,并且; 运行您的应用以接受来自外部的连接(npm app.jsgo run . 等)

确保您在浏览器上输入了http://ec2-...,而不是https://ec2-...即使您打开了443端口,您也无法使用https://连接到服务器,除非您已经配置了ssh证书。用http协议输入完整地址,不要省略,可能会解决问题。

【讨论】:

【参考方案14】:

以下是您可以遵循的步骤,当您检查这两个步骤时,它们很可能肯定会起作用。

    确保您在浏览器中使用 http:// 而不是在 IP 和亚马逊 IPV4 公共 DNS 上使用 https://(它以某种形式出现,例如 http://ec2-some-ip-address-here.region.compute.amazonaws.com

    点击instance id并向下滚动,

go to the security tab,

click on security group it will look like this [![enter image description here][1]][1]

Click on edit inbound rules

添加这个

For type- choose HTTP
Source - choose anywhere or anywhere ipv4

然后点击保存就完成了。

这两者的结合应该可以正常工作。

【讨论】:

【参考方案15】:

最好的方法是编辑您的安全入站规则。请参考下面的快照。

【讨论】:

【参考方案16】:

当我尝试从浏览器访问公共 IP 时,无法访问我的 Windows Ec2 实例。在检查完以上所有内容后,我不得不更新阻止传入流量的 Windows(Defender)防火墙设置。

【讨论】:

以上是关于无法通过公共 ip 访问 EC2 实例上的站点的主要内容,如果未能解决你的问题,请参考以下文章

无法通过PHP中的fsockopen访问ec2实例,指向我的ec2公共IP和指定端口

出现“无法访问此站点”错误的 EC2 实例

如何跟踪 EC2 实例或弹性 IP 上的公共带宽使用情况?

我为AWS EC2实例更改了区域。但我无法从新的IP地址和公共DNS看到一个网站

更改 EC2 实例上的公共 DNS

ec2 实例无法在没有弹性 IP 地址的情况下访问公共子网中的互联网?