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

在Next.js中间件中获取客户端IP失败,该如何解决?

在Next.js中间件中获取客户端IP的正确方法

可以在Next.js中间件中获取客户端IP,你的代码无法生效是因为误用了旧的请求对象属性——Next.js App Router的中间件使用Web标准的Request对象,不存在connection这类Node.js原生HTTP请求的属性。以下是正确的实现方式:

核心实现代码

export default async function middleware(request) {
  // 直接通过request.ip获取IP(Next.js已自动处理代理转发场景)
  const clientIp = request.ip;

  // 针对自定义服务器等特殊部署场景,可解析x-forwarded-for头作为备选
  const forwardedFor = request.headers.get('x-forwarded-for');
  const fallbackIp = forwardedFor ? forwardedFor.split(',')[0].trim() : null;

  const finalIp = clientIp || fallbackIp;
  console.log('客户端IP:', finalIp);

  // 后续中间件逻辑...
}

// 配置中间件匹配路径(可选)
export const config = {
  matcher: '/:path*', // 匹配所有路由
};

关键注意事项

  • 本地开发环境:request.ip会返回::1或127.0.0.1,这是正常的本地回环地址,测试真实IP需部署到线上环境。
  • 托管平台(如Vercel):平台会自动信任转发头,request.ip会直接返回客户端真实IP,无需手动解析x-forwarded-for。
  • 避免使用旧属性:不要尝试访问request.connection?.remoteAddress,该属性属于Node.js原生HTTP请求对象,不适用于Next.js的Middleware。

内容的提问来源于stack exchange,提问作者vaibhav deep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:31:02