【问题标题】:Static IP Address with Heroku (not Proximo)Heroku(不是 Proximo)的静态 IP 地址
【发布时间】:2014-01-02 03:10:00
【问题描述】:

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

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

【问题讨论】:

  • 我不认为有这样的选择。 Heroku 只有少数 IP,并且这些 IP 映射到它们的 http 路由器。不过,也许有一些解决方法可以为您工作。有哪些 API,它们究竟需要什么?
  • 你最后用了什么?获得一个用作子域的 VPS 会不会更容易,只是为了那些你需要专用 IP 的东西?想知道自己同样的问题(考虑迁移到 Heroku,我需要一个专用 IP 来满足我的电子邮件需求。)

标签: heroku ip static-ip-address


【解决方案1】:

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

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

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

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

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

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 地址。

【讨论】:

  • 请注意,目前这在欧盟地区不可用,仅在美国地区可用。
  • 直到今天仍然如此!
  • 不再如此!
  • 另请注意,您获得的 IP 地址集可能是固定的,但可能不是您专用的。这意味着 fixie 可能会使用有限的 IP 地址池,并将其中的一些分配给客户端。
【解决方案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’;

            }

    }

【讨论】:

    【解决方案3】:

    您可以使用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 之一。

    您可以使用 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")
    

    就是这样:)

    【讨论】:

    • 实际上 Quotaguard 提供了两种产品,其中一种作为 Heroku 附加组件提供的不是静态 IP 代理。如果你想要一个静态 IP,你应该遵循他们网站上的订阅流程:quotaguard.com/pricing#_quotaguardstatic
    • 这两个插件现在都在市场中。 Quotaguard Static 用于静态 IP,Quotaguard 用于动态非 Heroku IP。
    • openguard(和 fixie)给你两个 IP。当只能有一个时,有什么选择吗?我正在使用的 API 需要他们通过加密注册 IP 创建的访问密钥。我可以注册多个 IP,但每个请求必须包含一个与请求的 IP 匹配的密钥。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2018-11-04
    • 2016-08-27
    • 2011-06-23
    • 2012-04-01
    • 2012-03-11
    • 1970-01-01
    相关资源
    最近更新 更多