有没有办法为Heroku服务器获取一个静态IP地址?我正在尝试集成各种要求IP地址的API。由于Heroku的服务器设置,你永远不会有一台带有静态IP的服务器 - 而是你的IP是动态的。
我已经研究过像Proximo这样的附加组件,但这似乎是一种付费解决方案。有没有你不需要付费的静态IP的解决方案?
答案 0 :(得分:21)
您可以使用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")
就是这样:))
答案 1 :(得分:5)
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
:
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地址。
答案 2 :(得分: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’;
}
}