I am Hack Sparrow
Captain of the Internets.

Node.js get IP Address

Getting a user's IP address seems pretty straightforward in Node.js, right? Does it need a special post on my blog? Yes it does, we'll find out why in a few seconds.

Conventional wisdom says, this is how you would get the IP address from a request:

var ip = req.connection.remoteAddress;

But there is a problem. If you are running your app behind Nginx or any proxy, every single IP addresses will be 127.0.0.1 :D

Probably you can see the problem now. So what is the solution?

Look for the originating IP address in the X-Forwarded-For HTTP header. You will find it in req.header('x-forwarded-for'). Considering that fact, here is the best way to get the IP address of a user:

var ip = req.header('x-forwarded-for') || req.connection.remoteAddress;

Now you can be sure the variable ip will catch the IP address of the client, not your proxy's.

3 Responses to “Node.js get IP Address”

  1. Arindam says:

    Thanks for the post.

    What is the solution if you are using socket.io (websocket), where you get the remote address as,
    socket.sockets.on(‘connection’, function(client){
    var ip = client.handshake.address.address

    }

  2. Arindam says:

    var ip = client.handshake.headers['x-forwarded-for'] || client.handshake.address.address;

    working for me.

    I am properly getting the remote IP address and not 127.0.0.1

  3. Captain says:

    Great!

Make a Comment