423 Stimmen

Express.js: Wie erhalte ich die Adresse eines entfernten Clients?

Ich verstehe nicht ganz, wie ich die IP-Adresse eines entfernten Benutzers erhalten soll.

Nehmen wir an, ich habe eine einfache Anfrage wie die folgende:

app.get(/, function (req, res){
   var forwardedIpsStr = req.header('x-forwarded-for');
   var IP = '';

   if (forwardedIpsStr) {
      IP = forwardedIps = forwardedIpsStr.split(',')[0];  
   }
});

Ist der oben beschriebene Ansatz richtig, um die echte IP-Adresse des Benutzers zu ermitteln, oder gibt es einen besseren Weg? Und was ist mit Proxys?

24voto

Bald Punkte 2016
  1. Ajouter app.set('trust proxy', true)
  2. Utilice req.ip o req.ips auf die übliche Weise

11voto

jtlindsey Punkte 3788

Dies ist nur eine zusätzliche Information für diese Antwort .

Wenn Sie Folgendes verwenden nginx würden Sie hinzufügen proxy_set_header X-Real-IP $remote_addr; zum Standortblock für den Standort. /etc/nginx/sites-available/www.example.com zum Beispiel. Hier ist ein Beispiel für einen Server-Block.

server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;

    location / {
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_pass http://127.0.1.1:3080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Nach dem Neustart nginx können Sie auf die IP-Adresse in Ihrem node / express Anwendungswege mit req.headers['x-real-ip'] || req.connection.remoteAddress;

9voto

Lorem Ipsum Punkte 91

Ich weiß, dass diese Frage bereits beantwortet wurde, aber so habe ich meine zum Laufen gebracht.

let ip = req.connection.remoteAddress.split(`:`).pop();

6voto

Oyetoke Tobi Punkte 148

Ich habe ein Paket für diesen Zweck geschrieben. Sie können es als Express-Middleware verwenden. Mein Paket ist hier veröffentlicht: https://www.npmjs.com/package/express-ip

Sie können das Modul installieren mit

npm i express-ip

Verwendung

const express = require('express');
const app = express();
const expressip = require('express-ip');
app.use(expressip().getIpInfoMiddleware);

app.get('/', function (req, res) {
    console.log(req.ipInfo);
});

4voto

abbr Punkte 5000

Según Express hinter Proxys , req.ip hat den Reverse Proxy berücksichtigt, wenn Sie die folgenden Einstellungen vorgenommen haben trust proxy richtig. Deshalb ist es besser als req.connection.remoteAddress die von der Netzschicht bezogen wird und die der Proxy nicht kennt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X