12
votes

Adresse IP à distance avec Node-JS derrière Amazon ELB

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


1 commentaires

Si vous utilisez ELB en mode TCP, voir Stackoverflow.com/q/17981943/201952


4 Réponses :


6
votes

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 );
        }
);


2 commentaires

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'] n'existe pas. IP_ADDRESS sera juste non défini . IP_ADDRESS = REQ.HEEDERS ['X-FORWARDED-FOR'] || req.connection.remoteaddress ; `fera le travail



8
votes

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


2 commentaires

Var IP = Req.Headers ['X-Forwarded-for'] || req.connection.remoteaddress;


Il n'y a pas de req.connection.remoteaddress - a-t-il été supprimé dans Nodejs?



9
votes

Voici une solution au cas où vous utilisez Express :
Selon le documentation , vous pouvez activer fiduciaire proxy pour votre instance expresse et ensuite req.ip sera rempli avec l'adresse IP correcte.

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.

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.

Le deuxième changement Ceci fait correspondre aux valeurs REQ.IP et REQ.IPS peuplé avec la liste des adresses de X-transmises.

Voici un exemple: xxx



0
votes

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

Express, KOA, etc. Prenez généralement l'objet de la plupart des gauche, tandis que ELB en fait le meilleur article

(express docs):

Si TRUE, l'adresse IP du client est comprise comme entrée la plus à gauche dans l'en-tête transmis X-Forwed.


0 commentaires