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

如何在Vercel Edge Functions中获取客户端IP地址?

在Vercel Edge Function中获取客户端IP的正确方式

问题根源

你代码里误用了Next.js传统API的NextApiRequest/NextApiResponse类型,但Vercel Edge Runtime的函数参数是标准Web Request对象,这才是导致所有请求头返回undefined的核心原因。

修正后的代码

替换参数类型为Web标准Request,并使用headers.get()方法获取头信息:

export const config = {
  runtime: "edge",
};

export default async function handler(request: Request) {
  // 获取客户端IP相关请求头
  const realIp = request.headers.get("x-real-ip");
  const forwardedFor = request.headers.get("x-forwarded-for");
  const vercelForwardedFor = request.headers.get("x-vercel-forwarded-for");
  const ipCountry = request.headers.get("x-vercel-ip-country");

  console.log("realip", realIp);
  console.log("forwardedfor", forwardedFor);
  console.log("vercelforwardedfor", vercelForwardedFor);
  console.log("x-vercel-ip-country", ipCountry);

  return new Response(
    JSON.stringify({
      data: {
        data: "ok",
        clientIp: vercelForwardedFor || forwardedFor || realIp,
        country: ipCountry
      },
    }),
    {
      status: 200,
      headers: {
        "content-type": "application/json"
      },
    }
  );
}

关键说明

  • Edge Runtime完全遵循Web标准,必须使用Request/Response而非Next.js专属类型
  • x-vercel-forwarded-for是Vercel提供的专属头,直接返回客户端真实IP(若存在代理,第一个IP即为客户端IP)
  • 本地开发环境中这些头可能不会被注入,建议部署到Vercel线上环境测试真实效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:23:14