web-dev-qa-db-fra.com

Adresse IP statique avec Heroku (pas Proximo)

Existe-t-il un moyen d'obtenir une adresse IP statique pour un serveur Heroku? J'essaie d'intégrer diverses API qui demandent une adresse IP. En raison de la configuration du serveur Heroku, vous n'avez jamais un serveur avec une adresse IP statique - au lieu de cela votre adresse IP est dynamique.

J'ai étudié des modules complémentaires comme Proximo, mais cela semble être une solution payante. Y a-t-il une solution où vous avez une adresse IP statique que vous n'avez pas à payer?

30
Allen S

Vous pouvez utiliser QuotaGuard Static Add-on Heroku.

QuotaGuard peut être attaché à une application Heroku via la ligne de commande:

$ heroku addons:add quotaguardstatic

Après l'installation, l'application doit être configurée pour s'intégrer pleinement au module complémentaire. Lorsque vous vous inscrivez, vous recevrez un nom d'utilisateur et un mot de passe uniques que vous pourrez utiliser lors de la configuration de votre service proxy dans votre application.

Un paramètre QUOTAGUARDSTATIC_URL sera disponible dans la configuration de l'application et contiendra l'URL complète que vous devez utiliser pour proxy vos demandes d'API. Cela peut être confirmé à l'aide de la commande suivante:

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

Toutes les demandes que vous effectuez via ce proxy apparaîtront sur le serveur de destination pour provenir de l'une des deux adresses IP statiques qui vous seront attribuées lors de votre inscription.

Vous pouvez utiliser Un simple HTTP et REST client pour Ruby pour détecter votre IP:

$ gem install rest-client

Ensuite, vous pouvez exécuter l'exemple ci-dessous dans une session IRB et vérifier que l'IP finale retournée est l'une de vos deux IP statiques.

$ irb

>require "rest-client"

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

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

C'est tout:)

23
MicRum

Fixie est une autre option. Fixie est un module complémentaire qui fournit aux applications Heroku un ensemble fixe d'adresses IP statiques pour les demandes sortantes. Il est indépendant du langage et du framework.

Fixie est facile à installer et possède une documentation de "démarrage" (similaire à celle de Python ci-dessous) pour Ruby, Node, Java, Go ici . Voici la un pour Python.

Vous devez d'abord vous inscrire au plan gratuit:

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

Ensuite, le FIXIE_URL sera défini comme variable d'environnement. Pour acheminer une demande spécifique via Fixie à l'aide de 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)

En utilisant urllib2 la même fonctionnalité ressemblera à ceci:

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()

Dans les deux cas, ces demandes proviendraient d'une adresse IP connue attribuée par Fixie.

5
user527662

Vous pouvez utiliser Nginx comme proxy de réserve. Modifiez votre nginx.conf et définissez proxy_pass. Assurez-vous de définir proxy_set_header sur votre 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’;

            }

    }
2
amdstorm