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

时间:2012-04-20 21:00:25

标签: ruby-on-rails nginx amazon-ec2

我已经在EC2上进行了几天的试验,并且一直在反对我甚至能够访问我托管的示例网站。堆栈是Rails 3.1.3,带有Thin和Nginx。

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

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

我对系统管理员方面的经验不多,而且我现在基本上都难过了。任何建议都将不胜感激。

14 个答案:

答案 0 :(得分:115)

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

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

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

应该这样做。

答案 1 :(得分:37)

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

  • 登录EC2信息中心
  • 实例>实例
  • 操作下拉菜单>网络>更改安全组
  • 您可能会看到只允许启动向导-1,这对我来说只允许在端口22上进行SSH访问

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

  • 登录EC2信息中心
  • 网络和安全>安全组
  • 删除搜索框中可能显示所有群组的所有过滤器
  • 我个人编辑了默认的VPC安全组,因为这是我的沙箱,我想你会想为你的项目创建一个安全组
  • 选择安全组复选框,选择操作下拉列表并单击“编辑入站规则”,我使用以下入站规则只是为了确保它全部正常工作

Rules

  • 当您重新访问实例>实例>说明,您应该看到安全组和规则

enter image description here

  • 一旦你开心它正在工作我可能会用HTTP和HTTPS替换所有流量,如果这就是全部需要的话

答案 2 :(得分:25)

我之前在这里寻找解决我遇到的类似问题的方法。在我的情况下,除了EC2安全组之外,EC2实例还运行了自己的防火墙。命令'system-config-firewall'让我进入打开端口。默认情况下,端口80(HTTP)和3306(MySQL)未打开。 22(SSH)开放了。我还必须做'yum install system-config-firewall'。

总结一下,我的解决方案是:

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

答案 3 :(得分:19)

这个答案适用于那些不知道他们用ec2实例做什么的新手。

我遇到了同样的问题并尝试了所有安全组修复无效。

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

sudo service httpd start 

有时它很暗,不是因为保险丝烧坏了,而是因为你没有轻弹开关。

答案 4 :(得分:7)

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

答案 5 :(得分:4)

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

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

Step1 screenshots

  1. 检查80端口是否打开。 Step2 port 80 is not open 在这里您可以看到入站规则中的端口 80 未打开。所以我们先打开80端口。为此点击安全标签,您可以看到安全组打开这个新标签 Security group 现在您必须编辑入站规则。 Edit inbound rules 点击添加规则 然后选择类型 HTTP 和源 AnyWhere 并保存它。 enter image description here 同样,您也使用 HTTPS。

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

  3. 编辑网络 ACL。选择网络标签并在新窗口中打开子网 IDNetworking tab and subnet Id

Opened subnet Id 从 Subent Id 在新窗口中打开 Network ACL 现在编辑入站规则。 Edit inbound rule 100 Rule 100 should look like this, i.e, type=="HTTP"

答案 6 :(得分:3)

八达通的答案对我来说是正确的,除了Windows机器。 我需要转到Windows防火墙,如果它与规则不匹配,则会阻止VM的所有流量。端口80未在规则中启用,因此我只需添加一个。

答案 7 :(得分:2)

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

答案 8 :(得分:1)

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

您可以安装

<强> nginx的:

sudo apt-get install nginx

<强> apache2的:

sudo apt-get install apache2

答案 9 :(得分:0)

我有同样的问题,因为我没有使用Ubuntu或Linux的经验,所以我的脑子很糟糕。 Parag的答案修正了它。

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

您可以安装

nginx的:

sudo apt-get install nginx

apache2的:

sudo apt-get install apache2

答案 10 :(得分:0)

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

  1. 将服务绑定到0.0.0.0/3000而不是127.0.0.1/3000。 使您的服务保持开放状态,并可供互联网上的任何人访问, 就是步骤2出现了。)
  2. 如果需要,现在在AWS安全组中为端口3000提供0.0.0.0 可以通过互联网访问任何人,或者添加VPN或您的网络IP 只允许您和您的团队使用。

答案 11 :(得分:0)

我的问题是浏览器。

Chrome 工作正常; Firefox 不工作。

答案 12 :(得分:0)

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

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

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

答案 13 :(得分:-2)

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