J'ai une application de nœud sur une machine d'Amazon-Store d'instance derrière l'équilibreur de charge élastique (ELB). Cependant, l'adresse IP distante semble toujours être la même. J'ai utilisé ce code pour obtenir l'adresse IP du client dans le nœud (via Connect / Express):
req.socket.remoteAddress
4 Réponses :
Votre destination de recevoir la propriété intellectuelle de l'instance d'ELB et vous devez obtenir la valeur transmise de X-Forfait des en-têtes. Comme je ne suis pas un nœud.js gourou, j'ai trouvé ce code à http://forum.webfaction.com/ Viewtopic.php? id = 4500
Exemple: P>
var http = require( 'http' ), sys = require( 'sys' ); http.createServer( function( req, res ) { var ip_address = null; try { ip_address = req.headers['x-forwarded-for']; } catch ( error ) { ip_address = req.connection.remoteAddress; } sys.puts( ip_address ); } );
Cool merci, je viens de l'essayer et ça marche. Je ne savais pas à propos de cet en-tête.
N'est pas une erreur si req.headers ['x-transfert-for'] code> n'existe pas.
IP_ADDRESS CODE> sera juste
non défini code>.
IP_ADDRESS = REQ.HEEDERS ['X-FORWARDED-FOR'] || req.connection.remoteaddress code>; `fera le travail
La réponse a fonctionné pour moi, merci. Mais vous pouvez simplement essayer:
var ip_address = null; if(req.headers['x-forwarded-for']){ ip_address = req.headers['x-forwarded-for']; } else { ip_address = req.connection.remoteAddress; } sys.puts( ip_address );
Var IP = Req.Headers ['X-Forwarded-for'] || req.connection.remoteaddress;
Il n'y a pas de req.connection.remoteaddress code> - a-t-il été supprimé dans Nodejs?
Voici une solution En activant le paramétrage "Fiducion Proxy" via App.Enable ('Faired Proxy'),
Express aura des connaissances qu'il est assis derrière un proxy et que
Les champs de l'en-tête X-Forwarded-* peuvent être approuvés, ce qui peut être
facilement spoofed. p>
Activation de ce paramètre a plusieurs effets subtils. Le premier desquels
est que le proto-proto X-X peut être défini par le proxy inverse pour indiquer à la
application que c'est https ou simplement http. Cette valeur est reflétée par
req.protocol. P>
Le deuxième changement Ceci fait correspondre aux valeurs REQ.IP et REQ.IPS
peuplé avec la liste des adresses de X-transmises. p>
blockQuote> Voici un exemple: p>
Selon le documentation , vous pouvez activer fiduciaire proxy code> pour votre instance expresse et ensuite
req.ip code> sera rempli avec l'adresse IP correcte.
J'utilisais en fait celui-ci depuis quelques années, mais j'ai oublié cette question :) Merci de la ramener à nouveau!
Express 4 ont changé la façon dont Confiance proxy code> une option> est traitée, vous pouvez donc utiliser quelque chose comme
app.set ('fiducie proxy', 1) code> pour faire confiance à votre équilibreur de chargement
Au fait, dans le cas d'Amazon, je pense que la valeur doit être 2 code>, une pour la nginx sur la machine actuelle, et une autre est l'équilibreur de charge réel.
La réponse correcte sélectionnée ici est dangereuse, car AWS ELBS commutez la commande comme prévu: https://github.com/koajs/koa/issues/1094#issuecomment-345861282 p>
Express, KOA, etc. Prenez généralement l'objet de la plupart des gauche, tandis que ELB en fait le meilleur article p>
(express docs): p>
Si TRUE, l'adresse IP du client est comprise comme entrée la plus à gauche dans l'en-tête transmis X-Forwed. P> blockQuote>
Si vous utilisez ELB en mode TCP, voir Stackoverflow.com/q/17981943/201952