【问题标题】:No access to a rails server running behind a firewall无法访问在防火墙后运行的 Rails 服务器
【发布时间】:2015-06-01 16:29:00
【问题描述】:

我试图在朋友家中运行 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 服务器的机器的防火墙。操作系统是 ubuntu 12.04:防火墙(至少 ufw)未激活。我也可以使用端口 22 / ssh 连接到那台机器。

总结:

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby firewall


    【解决方案1】:

    在 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 地址更改时更改该调用。

    【讨论】:

    • 我们确实在使用 rails 4.2 并且按照您的指示我们解决了这个问题。 +1
    猜你喜欢
    • 2011-02-01
    • 2015-08-27
    • 2011-12-22
    • 2017-05-23
    • 2012-02-06
    • 1970-01-01
    • 2011-11-19
    • 2013-07-05
    • 1970-01-01
    相关资源
    最近更新 更多