无法访问防火墙后的 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)打开页面时,出现错误页面:无法连接到主机,主机可能已关闭,请稍后尝试连接。
我们尝试过的事情:
- 已更改端口转发 80 -> 80
- 已安装并启动 Apache:可以访问默认的 Apache 页面。
- 已停止 Apache 并在端口 80 上启动 rails 服务器(使用 sudo,否则无法使用端口 80):无法访问 rails 服务器。
我还检查了 运行 连接 rails 服务器的机器的防火墙。 OS 是 ubuntu 12.04:防火墙(至少是 ufw)未激活。我也可以使用端口 22 / ssh 连接到那台机器。
总结:
- rails 服务器可通过本地主机上的端口 3000 访问
- 端口转发适用于端口 22 和 80,并且 ssh 服务器和 apache 服务器均可访问
- rails 从外部无法通过端口 80 和 3000 访问服务器
我唯一能想到的是 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 地址更改时更改该调用。
我正在尝试 运行 朋友家中的 ror 应用程序,但无法从外部访问该应用程序。这是我们尝试过的。
已创建应用
$ rails new <application name>
并开始于
$ rails server
开发服务器启动并可在 http://localhost:3000
访问接下来我们在他用来连接到互联网的路由器上激活端口转发:我们已经将外部端口 3000 映射到 rails 服务器所在的内部主机上的端口 3000 运行宁。当我尝试从外部(使用 firefox)打开页面时,出现错误页面:无法连接到主机,主机可能已关闭,请稍后尝试连接。
我们尝试过的事情:
- 已更改端口转发 80 -> 80
- 已安装并启动 Apache:可以访问默认的 Apache 页面。
- 已停止 Apache 并在端口 80 上启动 rails 服务器(使用 sudo,否则无法使用端口 80):无法访问 rails 服务器。
我还检查了 运行 连接 rails 服务器的机器的防火墙。 OS 是 ubuntu 12.04:防火墙(至少是 ufw)未激活。我也可以使用端口 22 / ssh 连接到那台机器。
总结:
- rails 服务器可通过本地主机上的端口 3000 访问
- 端口转发适用于端口 22 和 80,并且 ssh 服务器和 apache 服务器均可访问
- rails 从外部无法通过端口 80 和 3000 访问服务器
我唯一能想到的是 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 地址更改时更改该调用。