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如何优雅地获取mac系统版本

    浅谈node如何优雅地获取mac系统版本

    这篇文章主要和大家聊聊node如何优雅地获取mac系统版本,文中有详细的代码示例和流程步骤,对我们学习或工作有一定的帮助,需要的朋友可以参考下
    2023-06-06
  • Cli Todo命令行todo工具使用演示

    Cli Todo命令行todo工具使用演示

    这篇文章主要为大家介绍了Cli Todo命令行todo工具使用演示示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • nodejs实现发出蜂鸣声音(系统报警声)的方法

    nodejs实现发出蜂鸣声音(系统报警声)的方法

    这篇文章主要介绍了nodejs实现发出蜂鸣声音(系统报警声)的方法,结合实例形式分析了nodejs发出蜂鸣声的原理及具体应用方法,需要的朋友可以参考下
    2017-01-01
  • 150行Node.js实现的dns代理工具

    150行Node.js实现的dns代理工具

    这篇文章主要介绍了150行Node.js实现的dns代理工具,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Node.js开发 path路径模块详解

    Node.js开发 path路径模块详解

    path 模块是 Node.js 官方提供的、用来处理路径的模块,它提供了一系列的方法和属性,用来满足用户对路径的处理需求,这篇文章主要介绍了Node.js开发 path路径模块,需要的朋友可以参考下
    2024-02-02
  • 基于Alpine Linux构建前端node-web镜像步骤详解

    基于Alpine Linux构建前端node-web镜像步骤详解

    这篇文章主要为大家介绍了基于Alpine Linux构建前端node-web镜像步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • ChatGPT编程秀之最小元素的设计示例详解

    ChatGPT编程秀之最小元素的设计示例详解

    这篇文章主要为大家介绍了ChatGPT编程秀之最小元素的设计示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 详解Koa中更方便简单发送响应的方式

    详解Koa中更方便简单发送响应的方式

    这篇文章主要介绍了详解Koa中更方便简单发送响应的方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Node.js文件写入教程逐步深入探讨

    Node.js文件写入教程逐步深入探讨

    这篇文章主要为大家介绍了Node.js文件写入教程逐步深入探讨,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Node.js编写爬虫的基本思路及抓取百度图片的实例分享

    Node.js编写爬虫的基本思路及抓取百度图片的实例分享

    这篇文章主要介绍了Node.js编写爬虫的基本思路及抓取百度图片的实例分享,其中作者提到了需要特别注意GBK转码的转码问题,需要的朋友可以参考下
    2016-03-03

最新评论