Статический 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’;

            }

    }
Другие вопросы по тегам