Статический IP-адрес с Heroku (не Proximo)
Есть ли способ получить один статический IP -адрес для сервера Heroku? Я пытаюсь интегрировать различные API, которые запрашивают IP -адрес. Из-за настройки сервера Heroku у вас никогда не будет одного сервера со статическим IP - вместо этого ваш IP является динамическим.
Я смотрел на дополнения, такие как Proximo, однако это, кажется, платное решение. Есть ли решение, при котором у вас есть статический IP, за который вам не нужно платить?
3 ответа
Вы можете использовать дополнение QuotaGuard Static Heroku.
QuotaGuard можно подключить к приложению Heroku через командную строку:
$ heroku addons:add quotaguardstatic
После установки приложение должно быть настроено для полной интеграции с надстройкой. Когда вы зарегистрируетесь, вам будет предоставлено уникальное имя пользователя и пароль, которые вы можете использовать при настройке прокси-службы в вашем приложении.
Параметр QUOTAGUARDSTATIC_URL будет доступен в конфигурации приложения и будет содержать полный URL-адрес, который следует использовать для прокси-запросов к API. Это можно подтвердить с помощью следующей команды:
$ heroku config:get QUOTAGUARDSTATIC_URL
http://user:pass@static.quotaguard.com:9293
Все запросы, которые вы делаете через этот прокси-сервер, будут появляться на сервере назначения с одного из двух статических IP-адресов, которые вам будут назначены при регистрации.
Вы можете использовать простой HTTP и REST-клиент для Ruby для определения вашего 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")
Это оно:)
Фикси это еще один вариант. Fixie - это надстройка, которая предоставляет приложениям Heroku фиксированный набор статических IP-адресов для исходящих запросов. Это не зависит от языка и структуры.
Fixie прост в настройке и имеет документацию "для начала" (аналогичную приведенной ниже для Python) для Ruby, Node, Java, Go здесь. Вот тот, для 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()
В обоих случаях эти запросы будут поступать через известный IP-адрес, назначенный Fixie.
Вы можете использовать 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’;
}
}