无法从公共IP连接到EC2上运行的Rails服务器

时间:2015-02-25 19:22:37

标签: ruby-on-rails amazon-web-services amazon-ec2

我最近遇到了 AWS EC2 实例的问题。问题是我无法通过公共IP命中我的Rails服务器,但我可以命中localhost,服务器将响应。

这就是我正在做的事情:

  • 创建新的EC2实例(t2.micro,ubuntu免费套餐)
  • 安全组端口22,80,3000对所有人开放(0.0.0.0)
  • SSH到EC2实例,安装rails(我一直使用this安装)
  • 安装后启动rails服务器,它在端口3000上运行
  • run" wget localhost:3000"它返回index.html,yay!
  • 进入我的网络浏览器,输入EC2实例公共IP和端口3000(IP:3000),表示无法连接:(
  • kill rails server,在端口80重新启动它,wget正常但无法通过公共IP连接
  • 作为一个完整性检查,我安装nginx并运行它,并且可以通过公共IP看到端口80上的nginx起始页 ......太混乱......

所以我认为它与我安装Rails的方式有关,但我尝试过的方法除了使用安装脚本以外我遇到了同样的问题...我&# 39;甚至尝试创建一个全新的AWS账户,以防我搞砸了原始账户中的设置,但没有运气。我之前已经能够在EC2实例上运行rails了(实际上我现在使用在我的AWS账户上运行的相同安全组的EC2实例并且可以很好地击中那些公共IP),但我现在只是敲打我的脑袋靠墙...任何帮助将不胜感激!

编辑:现在,我已经配置了nginx来点击我的rails服务器....至少现在可以工作......虽然我仍然很好奇为什么我无法点击我的直接使用rails服务器......

3 个答案:

答案 0 :(得分:11)

检查rails是否侦听0.0.0.0或127.0.0.1,默认是仅侦听localhost。

-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost

来自Ruby on Rails 4.2 Release Notes

  

由于Rack的更改,rails服务器现在默认侦听localhost而不是0.0.0.0。这应该对标准开发工作流程的影响最小,因为http://127.0.0.1:3000http://localhost:3000将继续像以前一样在您自己的计算机上工作。

答案 1 :(得分:1)

如果您正在使用' rails server'并希望使用默认端口3000,然后使用以下:

sudo rails server -b 0.0.0.0

可以http://[public_ip]:3000访问它。

如果要将其用作没有端口的URL,请使用以下命令运行服务器:

sudo rails server -p 80 -b 0.0.0.0

您只需将其作为http://[public_ip]访问。

答案 2 :(得分:0)

我在我的AWS Ubuntu实例上的默认端口3000上运行rails服务器,并允许此端口在安全组中,入站部分,但我仍然无法使用此访问我的应用程序。
http://public_ip:3000

我搜索了很多,这answer帮助了我。解释答案。我们必须使防火墙设置灵活,以便我们的防火墙允许端口3000。

您可以使用此命令检查防火墙上是否允许此端口。

$ sudo iptables -L | grep :3000

如果你什么也看不见,就意味着我们必须允许它使用这个命令。

$ sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT

这对我有用,可以在3000端口访问我的rails应用程序。