无法访问在防火墙后运行的rails服务器

Gio*_*gio 2 ruby firewall ruby-on-rails

我正在尝试在朋友家中运行ror应用程序,并且无法从外部访问应用程序.这是我们尝试过的.

该应用程序已创建

$ rails new <application name>
Run Code Online (Sandbox Code Playgroud)

并开始

$ rails server
Run Code Online (Sandbox Code Playgroud)

开发服务器启动并可在http:// localhost:3000上访问

接下来,我们在用于连接到互联网的路由器上激活了端口转发:我们已将外部端口3000映射到运行rails服务器的内部主机上的端口3000.当我尝试从外部打开页面(使用firefox)时,我收到一个错误页面:无法连接到主机,主机可能已关闭,请稍后尝试连接.

我们尝试过的事情:

  1. 更改端口转发80 - > 80
  2. 已安装并启动Apache:可以访问默认的Apache页面.
  3. 停止Apache并在端口80上启动rails服务器(使用sudo,否则无法使用端口80):无法访问rails服务器.

我还检查了运行rails服务器的机器的防火墙.操作系统是ubuntu 12.04:防火墙(至少是ufw)未激活.我也可以使用端口22/ssh连接到该机器.

总结:

  • rails服务器可在本地主机上的端口3000上访问
  • 端口转发适用于端口22和80,并且ssh服务器和apache服务器都可以访问
  • 无法从外部在端口80和3000上访问rails服务器

我唯一能想到的是rails可能有一个类似于Django的ALLOWED_HOSTS的机制,它拒绝外部请求,因为它们用于与localhost不同的主机.但是,我还没有找到关于这个主题的任何内容.此外,应用程序的日志文件不会显示rails服务器拒绝的任何连接尝试.

所以我们没有想法.接下来应该检查什么?

Fre*_*ung 10

在Rails 4.2之前,默认rails server是绑定到所有接口.在Rails 4.2中,默认情况下更改为仅绑定到127.0.0.1 - 应用程序日志中没有任何内容,因为套接字根本不在其他网络接口上侦听连接.

要允许来自另一台计算机的连接,您需要使用-b选项绑定到额外的IP地址,例如

rails s  -b 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

绑定到所有可用的IP地址.您当然可以用机器的一个实际IP地址替换0.0.0.0,但是当您的机器的IP地址发生变化时,您当然必须更改该调用.