2017-05-19 2 views
2

Ich muss die IP-Adresse des Clients mit meiner Anwendung in der Anfrage von hapijs Knoten ... Wir verwenden pm2 und Nginx für Server, um live zu laufen und wir haben die Anfrage verwendet .info.address, aber es gibt dem Server lokale IP als 127.0.0.1, aber was ich brauche, war die IP des Kunden, der meine Anwendung verwendet zB: 192.xx111 ...bekomme Client-IP-Adresse in Anfrage hapijs für Knoten

+0

Mögliche Duplikat [wie ein Benutzer die IP-Adresse in Knoten bestimmen] (http://stackoverflow.com/questions/8107856/ how-to-determining-a-users-IP-Adresse-in-Knoten) – str

Antwort

1

Ich bekomme immer Client-IP-Adresse mit dieser Funktion:)

return request.headers['x-forwarded-for'] || 
    request.connection.remoteAddress || 
    request.socket.remoteAddress || 
    request.connection.socket.remoteAddress; 

Hoffe es hilft.

+0

sorry bro @Sparw Ich habe versucht, diese und die Ergebnisse sind unten angegeben: req.headers ['x-forwarded-for'] => ' undefined ' request.connection.remoteAddress || anfrage.socket.remoteAddress || request.connection.socket.remoteAddress => diese Dinge werfen unter Fehler ** 'Debug: intern, Implementierung, Fehler TypeError: Uncaught Fehler: Kann Eigenschaft' remoteAddress 'von undefined nicht lesen ' ** – sunilsmith

+0

Vielleicht müssen Sie alle ersetzen "Anfrage" von "req"? – Sparw

0

Im Fall, wenn Sie den Server hinter einem Nginx Proxy-Server ausgeführt werden würden Sie

req.headers['x-real-ip'] 

sonst kann man

req.info.remoteAddress 
+0

ich versuchte dieses bro aber immer noch ** Undefined ** muss ich irgendwelche zusätzlichen Header-Funktion in meinem Ajax hinzufügen, um die IP in meinem Handler oder gibt es eine spezielle Möglichkeit, die IP in req für Hapi.Js zu bekommen, weil alle Die Antworten, die ich surfte, sind meistens für express.js – sunilsmith

+0

Am besten wäre es, Ihre Anfrage/Header/Verbindung Objekte zu trösten und zu sehen, welche alle Eigenschaften verfügbar sind. Anfordern.info funktioniert für hapi, aber Sie möchten vielleicht das gesamte Anfrageobjekt untersuchen, um zu sehen, warum es nicht funktioniert, oder Sie können Ihr Anfrageobjekt hier für alle zur Überprüfung einreichen. –

1

verwenden verwenden ich die gleiche Stack für meinen hapi laufe Apps mit Nginx und PM2. Das Übertragen von Anfragen über nginx an eine Knoten-App auf demselben Host führt immer zu 127.0.0.1 für die Remote-Adresse, da nginx die Anfrage auf demselben Host weiterleitet.

Lösung: es gibt ein dediziertes Plugin hapi-geo-locate, das die tatsächliche Klienten-IP-Adresse bestimmt, obwohl Sie Ihre APP hinter einem Rückproxy (wie nginx) laufen lassen.

hapi-geo-locate unterstützt verschiedene Proxies und HTTP-Header, also sollten Sie speichern und erhalten Sie die IP des Benutzers mit Ihrer App auf verschiedenen Plattformen.

Hoffe, dass hilft!

0

Sie sollten die Konfiguration auf dem Reverse-Proxy (nginx) überprüfen und sehen, ob Sie die IP senden und wie Sie es tun.

Zum Beispiel (nginx conf):

server { 
    listen  0.0.0.0:80; 
    server_name [your_domain]; 
    root /webroot/[your_domain or webapp name]; 
    access_log /var/log/nginx/[your_domain or webapp name].log; 

    location/{ 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header HOST $http_host; 
     proxy_set_header X-NginX-Proxy true; 

     proxy_pass http://127.0.0.1:[port assigned to node]; 
     proxy_redirect off; 
    } 
} 

In diesem Fall werden Sie die Client-IP über den Header X-Real-IP bekommen.

So in HapiJS, wo Sie Zugriff auf das request Objekt haben:

const ip = request.headers['x-real-ip'] || request.info.remoteAddress;