如何为 Rails 应用程序设置允许的 IP 客户端

How do you set the allowed IP clients for a Rails application

您在哪里配置允许连接到 Rails 应用程序的 IP 地址?

我有一个简单的 rails 应用程序,我在 Ubuntu 14.04.

的开发环境中继承了 运行s

它工作正常,直到最近从 git 合并了一些更改。现在,当我 运行 rails s 时,应用程序似乎开始像服务器一样瘦,正如预期的那样。

=> Booting Thin  
=> Rails 4.2.1 application starting in development on http://localhost:3000  
=> Run `rails server -h` for more startup options  
=> Ctrl-C to shutdown server  
>> Thin web server (v1.5.1 codename Straight Razor)  
>> Maximum connections set to 1024  
>> Listening on localhost:3000, CTRL+C to stop 

netstat 显示 rails 实际上正在按预期收听

tcp        0      0 localhost:3000          *:*                     LISTEN

我可以使用 127.0.0.1:3000 从服务器框上的浏览器正常访问该网站,并且一切似乎都正常工作。我无法从任何其他机器访问它,因为返回连接被拒绝状态,因为 rails 只允许端口 3000 上的本地主机。

如果我从命令行使用 thin start 启动 Thin,它 returns 具有类似的设置

>> Using rack adapter
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop

但这次 Thin 正在侦听来自任何 IP 的连接,我可以从另一台机器访问该站点。尽管两者都是 1.5.1 版,但单独启动 Thin 与从 rails 启动 Thin 在行为上存在差异。 Rails 配置中的某些内容限制 Thin 仅侦听来自本地主机的连接。

据我所知,我拥有所有最新的宝石。我认为这个问题可能与 eventmachine 有关,但我找不到任何东西。

感谢任何建议。

0.0.0.0:3000 是绑定到所有接口的别名。本地主机实际上只是本地主机 127.0.0.1,无法从外部访问。

With rails 4 我相信他们更改了 rails 的默认行为,因此服务器不再侦听外部接口。您可以使用

rails s -b 0.0.0.0

这会将它绑定到 0.0.0.0(所有接口),就好像您手动开始精简一样。

当您尝试从同一网络中的其他设备访问您的应用时,您需要允许端口 3000 的传入流量。在 ubuntu

上查看 Allowing Incoming Traffic on Specific Ports 的文档

当您启动服务器时,通过将 rails 应用程序绑定到特定 IP,指定您的 rails 应用程序将 运行 使用的 IP。这可以通过 -b 选项来完成。例如如果你的 ip 是 192.168.1.69

rails server -b 192.168.1.69 -p 3000

感谢勘误表

说的很清楚了,现在有了关键字"binding",可以看出这个问题之前有人问过。在配置文件中设置绑定会很有帮助,但似乎这是不可能的。我将尝试为 rails s 命令设置别名并使用它。

仅供参考,根据该版本的发行说明,rails 的 4.2 版中进行了更改,因为底层机架库发生了更改。