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

No access to a rails server running behind a firewall

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

已创建应用

$ rails new <application name>

并开始于

$ rails server

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

访问

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

我们尝试过的事情:

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

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

总结:

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

所以我们没主意了。接下来我们应该检查什么?

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

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

rails s  -b 0.0.0.0

绑定到所有可用的 IP 地址。您当然可以将 0.0.0.0 替换为您机器的实际 IP 地址之一,尽管您当然必须在机器的 IP 地址更改时更改该调用。