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

时间:2015-03-28 10:25:07

标签: ruby-on-rails ruby firewall

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

已使用

创建应用程序
$ rails new <application name>

并以

开头
$ rails server

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

上访问

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

我们尝试过的事情:

  1. 更改端口转发80 - &gt; 80
  2. 已安装并启动Apache:可以访问默认的Apache页面。
  3. 停止Apache并在端口80上启动rails服务器(使用sudo,否则无法使用端口80):无法访问rails服务器。
  4. 我还检查了运行rails服务器的机器的防火墙。操作系统是ubuntu 12.04:防火墙(至少是ufw)未激活。我也可以使用端口22 / ssh连接到该机器。

    汇总:

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

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

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

1 个答案:

答案 0 :(得分:10)

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

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

rails s  -b 0.0.0.0

绑定到所有可用的ip地址。当然,您可以使用计算机的一个实际IP地址替换0.0.0.0,但是当您的计算机的IP地址发生更改时,您当然必须更改该调用。