var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
(req.connection.socket ? req.connection.socket.remoteAddress : null);
で複数のIPアドレスを取得できる場合があることに注意してくださいreq.headers['x-forwarded-for']
。また、x-forwarded-for
ヘッダーが常に設定されるとは限らないため、エラーがスローされる可能性があります。
フィールドの一般的な形式は次のとおりです。
x-forwarded-for: client, proxy1, proxy2, proxy3
ここで、値はコンマ+スペースで区切られたIPアドレスのリストで、左端が元のクライアント、リクエストを受け取った連続した各プロキシがリクエストを受け取ったIPアドレスを追加します。この例では、要求が通過proxy1
、proxy2
その後、とproxy3
。proxy3
リクエストのリモートアドレスとして表示されます。
これは、が設定されていない場合のコメントについて、Martinが以下で提案した修正を加えたArnav Guptaによって提案されたソリューションです。x-forwarded-for
var ip = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress
req.ip