You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:36:05