How to get IP address in Node.js#

Getting a user's IP address seems pretty straightforward in Node.js, right? Does it need a special page on this website? 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.

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.