Create a gist now

Instantly share code, notes, and snippets.

@qiao /ip.js
Created Jan 17, 2012

Node.js get client IP address
// snippet taken from
function getClientIp(req) {
var ipAddress;
// The request may be forwarded from local web server.
var forwardedIpsStr = req.header('x-forwarded-for');
if (forwardedIpsStr) {
// 'x-forwarded-for' header may return multiple IP addresses in
// the format: "client IP, proxy 1 IP, proxy 2 IP" so take the
// the first one
var forwardedIps = forwardedIpsStr.split(',');
ipAddress = forwardedIps[0];
if (!ipAddress) {
// If request was not forwarded
ipAddress = req.connection.remoteAddress;
return ipAddress;

半年过去接口似乎变了, 我打印了 req 然后发现下面这样可以用. 总算还好

getClientIp = (req) ->
  x_ip = req.headers['x-forwarded-for']
  unless x_ip? then x_ip = req.connection.remoteAddress
function getClientAddress(request){ 
        return (headers['x-forwarded-for'] || '').split(',')[0] 
            || connection.remoteAddress
var getClientAddress = function (req) {
    return (req.headers['x-forwarded-for'] || '').split(',')[0] 
        || req.connection.remoteAddress;

Will that work? If so that is really concise and quite nice. I didn't know you could get so creative with the ||'s!


i am using express 3.4.8 i have enable trusted proxy by app.enable('trust proxy') ,my req.headers does not contain X-Forward-For


The header can be x-forwarded-for or X-Forwarded-For, so:

var getClientIp = function(req) {
    return (req.headers["X-Forwarded-For"] ||
            req.headers["x-forwarded-for"] ||
            '').split(',')[0] ||
var ip = req.headers["X-Forwarded-For"] || req.connection.remoteAddress;

Always returns the host IP and not the client IP in my case.


X-Forwarded-For? You're checking easily spoofed headers to get an IP?


If you install gentoo you don't need all of this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment