我最近遇到了 AWS EC2 实例的问题。问题是我无法通过公共IP命中我的Rails服务器,但我可以命中localhost,服务器将响应。
这就是我正在做的事情:
所以我认为它与我安装Rails的方式有关,但我尝试过的方法除了使用安装脚本以外我遇到了同样的问题...我&# 39;甚至尝试创建一个全新的AWS账户,以防我搞砸了原始账户中的设置,但没有运气。我之前已经能够在EC2实例上运行rails了(实际上我现在使用在我的AWS账户上运行的相同安全组的EC2实例并且可以很好地击中那些公共IP),但我现在只是敲打我的脑袋靠墙...任何帮助将不胜感激!
编辑:现在,我已经配置了nginx来点击我的rails服务器....至少现在可以工作......虽然我仍然很好奇为什么我无法点击我的直接使用rails服务器......答案 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:3000和http://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应用程序。