使用静态IP从Heroku连接到远程数据库(因为数据库服务器只允许列入白名单的IP)

时间:2014-02-17 04:56:51

标签: ruby-on-rails heroku remote-access proximo

我正在Heroku上运行Ruby on Rails应用程序,而我的数据库位于另一个仅使用某些白名单IP访问的地方,但由于heroku不提供动态IP,我想使用proximo。

请帮助我如何使用heroku的proximo连接到远程数据库。

4 个答案:

答案 0 :(得分:4)

我们很难实现这一目标(我们最终将每个域名列入白名单)


<强> IP的

问题是Dyno是托管在AWS' EC2 cloud上的 - 这意味着他们实际上并不是Heroku的服务器。这会导致许多问题,因为IP都被笼罩着。改变:

  

因为Heroku dyno网格本质上是动态的,所以是IP地址   随着时间的推移,给定的dyno将是动态的   不可预知的。这种动态的出站流量来源可以实现   难以与API集成或通过防火墙建立连接   需要基于IP的白名单

看到proximo addon后,您可以使用静态IP

来实现所需

<强> Proximo软体

根据proximo tutorial on Heroku's site,您应该可以安装附加组件&amp;相对简单地接收您的出站IP:

$ heroku addons:add proximo:development
Adding proximo to sharp-mountain-4005⦠done, v18 ($5/mo)
Your static IP address is 127.0.0.1

然后,您应该可以在数据库主机上使用它 - 以允许IP

答案 1 :(得分:1)

没有ruby数据库适配器本身支持代理连接,因此对于数据库访问,您需要通过SOCKS代理代理您的调用。执行此操作的SOCKS包装器脚本可作为QuotaGuard Static Heroku add-on的一部分提供。

您可以通过在Procfile中预先调用包装器脚本来配置它,因此应该以最小的集成工作。

 web: bin/qgsocksify bundle exec unicorn -p $PORT -c ./config/unicorn.rb

默认情况下,此包装器通过代理路由所有出站TCP流量,但还有其他配置可用于将此限制为仅限于数据库流量。

答案 2 :(得分:0)

解决方法是将SQL数据库提供程序管理界面中的所有IP地址列入白名单: 您可以通过将0.0.0.0/0列入白名单来完成此操作。 (在Google Cloud SQL中,您可以在&#34;授权网络&#34;)下执行此操作

如果这样做,强烈建议您将连接配置为使用SSL并仅允许与数据库建立SSL连接。

答案 3 :(得分:0)

您可以将NGINX配置为反向代理,以允许您的Heroku应用程序连接到IP地址(这是您的NGINX服务器并列入白名单),反向代理将连接到数据库。

https://stackoverflow.com/a/27874505/1345865

http://blog.talenox.com/post/107675614745/how-to-setup-static-ip-on-heroku