gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:17:13 26 4
gpt4 key购买 nike

我正尝试在 friend 家里运行一个 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 服务器均可访问
  • 无法从外部通过端口 80 和 3000 访问 Rails 服务器

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

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

最佳答案

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

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

rails s  -b 0.0.0.0

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

关于ruby-on-rails - 无法访问在防火墙后运行的 Rails 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29316026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com