无法从 public IP 连接到 EC2 上的 Rails 服务器 运行
Can't connect to Rails server running on EC2 from public IP
我最近遇到了 AWS EC2 实例的问题。问题是我无法通过 public IP 访问我的 Rails 服务器,但我可以访问本地主机并且服务器会响应。
这是我正在做的事情:
- 创建新的 EC2 实例(t2.micro、ubuntu 免费套餐)
- 安全组有22、80、3000端口对所有人开放(0.0.0.0)
- SSH 到 EC2 实例,安装 rails(我一直使用 this 安装)
- 安装后启动rails服务器,运行在端口3000上
- 运行 "wget localhost:3000" 并且它 returns index.html,耶!
- 转到我的网络浏览器,输入 EC2 实例 public IP 和端口 3000 (IP:3000),说它无法连接 :(
- 杀死 rails 服务器,在端口 80 上重新启动它,wget 工作但无法通过 public IP
连接
- 作为完整性检查,我安装了 nginx 并 运行 它,并且可以通过 public IP.. 在端口 80 上看到 nginx 启动页面。 . 好困惑...
所以我认为这与我的安装方式有关 Rails,但我尝试了使用该安装脚本以外的方法,但遇到了同样的问题...我'我什至尝试过创建一个全新的 AWS 账户,以防万一我搞砸了我原来账户中的设置,但没有成功。我以前能够在 EC2 实例上获得 rails 运行ning 就好了(事实上,我的 EC2 实例现在在我的 AWS 帐户上使用相同的安全组 运行ning 并且可以命中那些 public IP 就好了),但我现在只是在用头撞墙...任何帮助将不胜感激!
编辑:现在,我已经配置了 nginx 来访问我的 rails 服务器....至少现在可以使用...虽然我仍然很好奇为什么我不能访问我的服务器rails 直接服务器...
检查 rails 是否在 0.0.0.0 或 127.0.0.1 上侦听,默认仅在本地主机上侦听。
-b, --binding=IP Binds Rails to the specified IP.
Default: localhost
来自Ruby on Rails 4.2 Release Notes:
Due to a change in Rack, rails server now listens on localhost instead of 0.0.0.0 by default. This should have minimal impact on the standard development workflow as both http://127.0.0.1:3000 and http://localhost:3000 will continue to work as before on your own machine.
如果您正在使用 '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]
.
的身份访问它
我是 运行 我的 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
这让我的 rails 应用程序可以访问端口 3000。
我最近遇到了 AWS EC2 实例的问题。问题是我无法通过 public IP 访问我的 Rails 服务器,但我可以访问本地主机并且服务器会响应。
这是我正在做的事情:
- 创建新的 EC2 实例(t2.micro、ubuntu 免费套餐)
- 安全组有22、80、3000端口对所有人开放(0.0.0.0)
- SSH 到 EC2 实例,安装 rails(我一直使用 this 安装)
- 安装后启动rails服务器,运行在端口3000上
- 运行 "wget localhost:3000" 并且它 returns index.html,耶!
- 转到我的网络浏览器,输入 EC2 实例 public IP 和端口 3000 (IP:3000),说它无法连接 :(
- 杀死 rails 服务器,在端口 80 上重新启动它,wget 工作但无法通过 public IP 连接
- 作为完整性检查,我安装了 nginx 并 运行 它,并且可以通过 public IP.. 在端口 80 上看到 nginx 启动页面。 . 好困惑...
所以我认为这与我的安装方式有关 Rails,但我尝试了使用该安装脚本以外的方法,但遇到了同样的问题...我'我什至尝试过创建一个全新的 AWS 账户,以防万一我搞砸了我原来账户中的设置,但没有成功。我以前能够在 EC2 实例上获得 rails 运行ning 就好了(事实上,我的 EC2 实例现在在我的 AWS 帐户上使用相同的安全组 运行ning 并且可以命中那些 public IP 就好了),但我现在只是在用头撞墙...任何帮助将不胜感激!
编辑:现在,我已经配置了 nginx 来访问我的 rails 服务器....至少现在可以使用...虽然我仍然很好奇为什么我不能访问我的服务器rails 直接服务器...
检查 rails 是否在 0.0.0.0 或 127.0.0.1 上侦听,默认仅在本地主机上侦听。
-b, --binding=IP Binds Rails to the specified IP.
Default: localhost
来自Ruby on Rails 4.2 Release Notes:
Due to a change in Rack, rails server now listens on localhost instead of 0.0.0.0 by default. This should have minimal impact on the standard development workflow as both http://127.0.0.1:3000 and http://localhost:3000 will continue to work as before on your own machine.
如果您正在使用 '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]
.
我是 运行 我的 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
这让我的 rails 应用程序可以访问端口 3000。