题 Heroku的静态IP地址(不是Proximo)


有没有办法为Heroku服务器获取一个静态IP地址?我正在尝试集成各种要求IP地址的API。由于Heroku的服务器设置,您永远不会有一台带有静态IP的服务器 - 而是您的IP是动态的。

我已经研究过像Proximo这样的附加组件,但这似乎是一个付费的解决方案。是否有一个解决方案,你有一个你不需要支付的静态IP?


26
2017-12-14 10:03


起源


我认为没有这样的选择。 Heroku只有少量IP,并且这些IP映射到他们的http路由器。但是,也许有一些可以为您工作的变通方法。什么API,它们究竟需要什么? - Nitzan Shaked
你到底用了什么?获得一个VPS作为一个子域,在某个地方只是为了那些需要专用IP的东西,这不是更容易吗?想知道自己同样的问题(考虑转移到Heroku,我需要一个专用的IP来满足我的电子邮件需求。) - Fabien Snauwaert


答案:


您可以使用 QuotaGuard Static Heroku附加组件。

可以通过命令行将QuotaGuard附加到Heroku应用程序:

$ heroku addons:add quotaguardstatic

安装后,应将应用程序配置为与加载项完全集成。 注册时,您将获得一个唯一的用户名和密码,您可以在应用程序中配置代理服务时使用该用户名和密码

应用程序配置中将提供QUOTAGUARDSTATIC_URL设置,其中包含用于代理API请求的完整URL。 这可以使用下一个命令确认:

$ heroku config:get QUOTAGUARDSTATIC_URL
http://user:pass@static.quotaguard.com:9293 

您通过此代理发出的所有请求都将显示给目标服务器,以便您在注册时将分配给您分配的两个静态IP之一。

您可以使用简单的HTTP和REST客户端来检测您的IP:

$ gem install rest-client

接下来,您可以在IRB会话中运行以下示例,并验证返回的最终IP是否是您的两个静态IP之一。

$ irb

>require "rest-client"

>RestClient.proxy = 'http://user:pass@static.quotaguard.com:9293'

>res = RestClient.get("http://ip.jsontest.com")

而已:)


18
2017-12-25 23:28



实际上Quotaguard提供了两种产品,而作为Heroku附加组件提供的产品不是静态IP代理。如果您需要静态IP,则应遵循其网站上的订阅流程: quotaguard.com/pricing#_quotaguardstatic - PEF
这两个加载项现在都在Marketplace中。用于静态IP的Quotaguard Static,用于动态非Heroku IP的Quotaguard。 - Tim Williams
openguard(和fixie)给你两个IP。什么时候可以只有一个?我正在使用的API需要通过加密已注册的IP来创建的访问密钥。我可以注册多个IP,但每个请求必须包含与请求的IP匹配的密钥。 - Michael Johnston


Fixie 是另一种选择。 Fixie是一个附加组件,为Heroku应用程序提供一组固定的出站请求静态IP地址。它与语言和框架无关。

Fixie易于设置,并且具有Ruby,Node,Java,Go的“入门”文档(类似于下面的Python) 这里。这是Python的一个。

首先,您需要注册免费计划:

$ heroku addons:open fixie
Opening fixie for sharp-mountain-4005…

接下来, FIXIE_URL 将被设置为环境变量。使用Fixie通过Fixie路由特定请求 requests

import os, requests
proxyDict = { 
              "http"  : os.environ.get('FIXIE_URL', ''), 
              "https" : os.environ.get('FIXIE_URL', '')
            }
r = requests.get('http://www.example.com', proxies=proxyDict)

运用 urllib2 相同的功能将如下所示:

import os, urllib2
proxy  = urllib2.ProxyHandler({'http': os.environ.get('FIXIE_URL', '')})
auth   = urllib2.HTTPBasicAuthHandler()
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
response = opener.open('http://www.example.com')
html = response.read()

在这两种情况下,这些请求都将通过Fixie分配的已知IP地址进行。


4
2017-09-26 23:35



请注意,这目前在欧盟地区不可用,只有美国地区。 - lgx


您可以使用Nginx作为预留代理。编辑你的nginx.conf并设置proxy_pass。确保将proxy_set_header设置为herokuapp

    upstream backend  {

            server xxx.talenox.com;

    }

    server {

            listen          80;

            server_name     rpb1.talenox.com;

            location / {

                    proxy_pass              http://backend;

                    proxy_redirect          off;

                    proxy_set_header        X-Forwarded-For $remote_addr;

                    proxy_set_header        Host ‘xxxxx.herokuapp.com’;

            }

    }

2
2018-01-10 09:01