32

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

我研究过像 Proximo 这样的附加组件,但这似乎是一个付费解决方案。有没有一种解决方案可以让您拥有无需付费的静态 IP?

4

3 回答 3

24

您可以使用QuotaGuard 静态Heroku 插件。

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

$ heroku addons:add quotaguardstatic

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

QUOTAGUARDSTATIC_URL 设置将在应用配置中可用,并将包含您应该用来代理 API 请求的完整 URL。这可以使用下一个命令来确认:

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

您通过此代理发出的所有请求将在目标服务器上显示为源自您在注册时将分配的两个静态 IP 之一。

您可以使用 Ruby 的简单 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")

而已:)

于 2013-12-25T23:28:16.173 回答
9

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

Fixie 易于设置,并具有适用于 Ruby、Node、Java 和 Go here的“入门”文档(类似于下面的 Python 文档)。这是 Python 的。

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

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

接下来,FIXIE_URL将设置为环境变量。要通过 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 地址。

于 2015-09-26T23:35:48.340 回答
2

您可以使用 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’;

            }

    }
于 2015-01-10T09:01:40.070 回答