如何在Node.js中基于API请求获取发起请求的用户设备IP地址
Node.js 服务获取API调用方设备IP地址的方法
完全可以实现获取调用方的IP地址,根据你使用的服务框架和部署场景,对应不同的获取方式:
1. 原生Node.js HTTP服务场景
无需额外依赖,直接从请求对象的socket/connection属性获取:
const http = require('http'); const server = http.createServer((req, res) => { const clientIP = req.socket.remoteAddress || req.connection.remoteAddress; res.end(`Client IP: ${clientIP}`); }); server.listen(3000);
本地测试时获取到的
::1或127.0.0.1是正常的本地回环IP,属于正常情况。
2. 存在反向代理/CDN的部署场景
如果你的Node.js服务前部署在Nginx、CDN等反向代理服务之后,直接获取的remoteAddress会是代理服务器的IP,而非用户真实IP,此时需要从请求头X-Forwarded-For中提取:
X-Forwarded-For的格式为真实用户IP, 代理1IP, 代理2IP...,取第一个值即可,示例代码:
const getRealClientIp = (req) => { const xForwardedFor = req.headers['x-forwarded-for']; if (xForwardedFor) { return xForwardedFor.split(',')[0].trim(); } // 无代理时回退到直接获取IP return req.socket.remoteAddress || req.connection.remoteAddress; }
注意:该场景需要提前在反向代理服务中配置开启
X-Forwarded-For头的转发,否则无法读取到该请求头。
3. 常用框架快捷获取方式
- Express框架:
开启trust proxy配置后,可直接通过req.ip获取真实IP:
const express = require('express'); const app = express(); // 配置信任代理,可填写代理IP段,填true代表信任所有代理 app.set('trust proxy', true); app.get('/api/test', (req, res) => { res.send(`Client IP: ${req.ip}`); }); app.listen(3000);
- Koa框架:
初始化时开启proxy配置后,可直接通过ctx.ip获取真实IP:
const Koa = require('koa'); const app = new Koa({ proxy: true // 开启代理模式,自动解析X-Forwarded-For头 }); app.use(async ctx => { ctx.body = `Client IP: ${ctx.ip}`; }); app.listen(3000);
内容的提问来源于stack exchange,提问作者keerthana
相关产品推荐
相关产品推荐

