Статический IP-адрес с Heroku (не Proximo)

Есть ли способ получить один статический IP-адрес для сервера Heroku? Я пытаюсь интегрировать различные API, которые запрашивают IP-адрес. Из-за настройки сервера Heroku у вас никогда не будет одного сервера со статическим IP-адресом — вместо этого ваш IP-адрес будет динамическим.

Я просмотрел надстройки, такие как Proximo, однако это, похоже, платное решение. Есть ли решение, при котором у вас есть статический IP-адрес, за который вам не нужно платить?


person Allen S    schedule 14.12.2013    source источник
comment
Я не думаю, что есть такой вариант. У Heroku всего несколько IP-адресов, и они привязаны к их http-маршрутизаторам. Возможно, есть обходные пути, которые могут сработать для вас. Какие API и что именно они требуют?   -  person Nitzan Shaked    schedule 15.12.2013
comment
Что вы в итоге использовали? Не проще ли было бы получить VPS, используемый в качестве поддомена, где-нибудь только для тех вещей, для которых вам нужен выделенный IP-адрес? Сам задаюсь тем же вопросом (учитывая переход на Heroku, и мне нужен выделенный IP-адрес для моих нужд электронной почты.)   -  person Fabien Snauwaert    schedule 07.03.2015


Ответы (3)


Вы можете использовать надстройку QuotaGuard Static Heroku.

QuotaGuard можно подключить к приложению Heroku через командную строку:

$ heroku addons:add quotaguardstatic

После установки приложение должно быть настроено для полной интеграции с надстройкой. Когда вы зарегистрируетесь, вам будет предоставлено уникальное имя пользователя и пароль, которые вы можете использовать при настройке прокси-сервиса в своем приложении.

Параметр QUOTAGUARDSTATIC_URL будет доступен в конфигурации приложения и будет содержать полный URL-адрес, который вы должны использовать для прокси-запросов API. Это можно подтвердить с помощью следующей команды:

$ heroku config:get QUOTAGUARDSTATIC_URL
http://user:[email protected]:9293 

Все запросы, которые вы делаете через этот прокси-сервер, будут отображаться на целевом сервере как исходящие с одного из двух статических IP-адресов, которые будут назначены вам при регистрации.

Вы можете использовать простой клиент HTTP и REST для Ruby для определения вашего IP:

$ gem install rest-client

Затем вы можете запустить приведенный ниже пример в сеансе IRB и убедиться, что окончательный возвращенный IP-адрес является одним из ваших двух статических IP-адресов.

$ irb

>require "rest-client"

>RestClient.proxy = 'http://user:[email protected]:9293'

>res = RestClient.get("http://ip.jsontest.com")

Вот и все:)

person MicRum    schedule 25.12.2013

Fixie — еще один вариант. 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.

person user527662    schedule 26.09.2015
comment
Обратите внимание, что в настоящее время это недоступно в регионе ЕС, только в регионе США. - person lgx; 18.09.2017
comment
Так и по сей день! - person Stan; 15.03.2019
comment
Больше не так! - person Christoph Hansen; 27.01.2021

Вы можете использовать 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’;

            }

    }
person amdstorm    schedule 10.01.2015