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

spa*_*eys 6 ruby-on-rails amazon-ec2 amazon-web-services

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

这是我正在做的事情:

  • 创建新的EC2实例(t2.micro,ubuntu免费套餐)
  • 安全组端口22,80,3000对所有人开放(0.0.0.0)
  • SSH到EC2实例,安装rails(我一直用这个来安装)
  • 安装后启动rails服务器,它在端口3000上运行
  • 运行"wget localhost:3000",它返回index.html,是的!
  • 转到我的网络浏览器,输入EC2实例公共IP和端口3000(IP:3000),说它无法连接:(
  • 杀死rails服务器,在端口80重新启动它,wget工作但无法通过公共IP连接
  • 作为一个完整性检查,我安装nginx并运行它,并可以通过公共IP在端口80上看到nginx启动页面 ...所以很困惑...

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

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

at0*_*mzk 11

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

-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost
Run Code Online (Sandbox Code Playgroud)

Ruby on Rails 4.2发行说明:

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

  • 运行`bundle exec rails server -b 0.0.0.0`实际上解决了我的问题!现在我可以在不使用nginx的情况下轻松点击我的服务器...在最新版本的Rail中,默认绑定是否发生了变化?一周前我没有这个问题...... (3认同)