Node koa服务器实现获取客户端ip

 更新时间:2025年02月13日 16:25:21   作者:GP9_小怪兽  
这篇文章主要为大家详细介绍了Node koa服务器实现获取客户端ip的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解下

1. 确保请求不是来自本地

如果你在本地测试,浏览器直接访问 localhost 或 127.0.0.1,服务端自然只能看到本地 IP。要测试真实 IP,可以:

  • 另一台设备(如手机或其他电脑)访问你的服务。
  • 部署到公网服务器,通过公网 IP 或域名访问。

2. 正确处理反向代理

如果服务部署在 Nginx 等反向代理后,需确保代理正确传递客户端的 IP 地址。以下是常见问题的解决方案:

(1) 在 Koa 中启用代理信任Koa 默认不信任代理的 X-Forwarded-For 头,需手动启用:

const Koa = require('koa');
const app = new Koa();

// 启用代理信任(如果部署在反向代理后)
app.proxy = true; // 关键!告诉 Koa 信任反向代理的头部

// 其他中间件和路由...

(2) 从请求头中提取真实 IP修改路由代码,优先从 X-Forwarded-For 中提取 IP,并处理可能的多个 IP(如多层代理):

router.get('/get-ip', (ctx) => {
  // 从 X-Forwarded-For 中提取客户端 IP(处理多个代理的情况)
  const forwardedIps = ctx.request.get('X-Forwarded-For') || '';
  const clientIP = forwardedIps.split(',')[0]?.trim() || ctx.ip;

  ctx.body = {
    ip: clientIP
  };
});

(3) 检查其他可能头部有些代理服务器(如 Nginx)会用 X-Real-IP 传递真实 IP,可以补充检查:

const clientIP = ctx.get('X-Real-IP') || forwardedIps.split(',')[0]?.trim() || ctx.ip;

3. 验证反向代理配置

如果使用 Nginx,确保配置中包含传递 IP 的头部:

location / {
  proxy_pass http://localhost:3000;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
}

完整代码示例

const Koa = require('koa');
const Router = require('@koa/router');

const app = new Koa();
const router = new Router();

// 启用代理信任(关键!)
app.proxy = true;

router.get('/get-ip', (ctx) => {
  // 尝试从 X-Forwarded-For 中提取第一个 IP(适用于反向代理)
  const forwardedIps = ctx.get('X-Forwarded-For') || '';
  const clientIP = forwardedIps.split(',')[0]?.trim() || 
                   ctx.get('X-Real-IP') || 
                   ctx.ip;

  ctx.body = {
    ip: clientIP
  };
});

app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

测试方法

  • 本地测试:用 curl 或 Postman 从其他设备访问你的服务。
  • 公网测试:部署到服务器后,通过浏览器或工具访问,观察返回的 IP 是否与你的公网 IP 一致。

如果问题仍未解决,请检查

  • 是否启用了 app.proxy = true?
  • 反向代理配置是否正确?
  • 是否有防火墙或 CDN 干扰?

到此这篇关于Node koa服务器实现获取客户端ip的文章就介绍到这了,更多相关Node获取客户端ip内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • node实现简单的增删改查接口实例代码

    node实现简单的增删改查接口实例代码

    在本篇文章里小编给大家整理的是关于node实现简单的增删改查接口的相关实例内容,有需要的朋友们可以学习下。
    2019-08-08
  • node.js中的console.log方法使用说明

    node.js中的console.log方法使用说明

    这篇文章主要介绍了node.js中的console.log方法使用说明,本文介绍了console.log的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • node.js中get和post接口教程

    node.js中get和post接口教程

    这篇文章主要介绍了node.js中get和post接口学习,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Node.JS使用Sequelize操作MySQL的示例代码

    Node.JS使用Sequelize操作MySQL的示例代码

    Node.JS提供了操作数据库的基础接口,本篇文章主要介绍了Node.JS使用Sequelize操作MySQL的示例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-10-10
  • 手把手教你通过nodejs快速搭建一个服务器

    手把手教你通过nodejs快速搭建一个服务器

    这篇文章主要给大家介绍了关于如何通过nodejs快速搭建一个服务器的相关资料,在node.js中创建一个服务器非常简单,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • Mac node删除以及重新安装案例详解

    Mac node删除以及重新安装案例详解

    这篇文章主要介绍了Mac node删除以及重新安装案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Node.js安装详细步骤教程(Windows版)详解

    Node.js安装详细步骤教程(Windows版)详解

    这篇文章主要介绍了Node.js安装详细步骤教程(Windows版),本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • 关于nodejs和npm版本不匹配的解决方法

    关于nodejs和npm版本不匹配的解决方法

    在运行npm命令时总会出现如下报错,npm dose not support Node.js v12.18.0,发现是node版本和npm版本不匹配造成的,所以本文给大家介绍了关于nodejs和npm版本不匹配的解决方法,需要的朋友可以参考下
    2023-11-11
  • 详解nodejs 文本操作模块-fs模块(五)

    详解nodejs 文本操作模块-fs模块(五)

    本篇文章主要介绍了nodejs 文本操作模块-fs模块(五),这里再说最后一个我看来很重要的方法,监听文件或者目录的的方法watchFile。有兴趣的可以了解一下。
    2016-12-12
  • 详解基于Node.js的HTTP/2 Server实践

    详解基于Node.js的HTTP/2 Server实践

    HTTP/2目前已经逐渐的在各大网站上开始使用,这篇文章主要介绍了详解基于Node.js的HTTP/2 Server实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05

最新评论