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?
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:)
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.
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’;
}
}