node.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > node.js > Node获取客户端ip

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

作者:GP9_小怪兽

这篇文章主要为大家详细介绍了Node koa服务器实现获取客户端ip的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解下

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

如果你在本地测试,浏览器直接访问 localhost 或 127.0.0.1,服务端自然只能看到本地 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');
});

测试方法

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

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

您可能感兴趣的文章:
阅读全文