自己搭一个反向代理吧

164 阅读3分钟

想搞个反向代理服务帮我调用gemini服务。

🛠️ 第一步:准备代码

新建一个文件夹,名字叫 gemini-proxy。 创建2 个文件。

文件 1:package.json (告诉 Vercel 这是一个项目)

新建一个文件命名为 package.json,粘贴以下内容:

{
  "name": "gemini-proxy",
  "version": "1.0.0",
  "scripts": {
    "start": "echo 'Proxy is running'"
  }
}
文件 2:api/index.js (核心代理逻辑)

注意:gemini-proxy 文件夹里,先新建一个叫 api 的文件夹。 然后进入 api 文件夹,新建 index.js,粘贴以下代码。 (这段代码的作用是:把发给你的请求,伪装一下,转发给 Google,再把 Google 的回复转发给你。)


export const config = {
  runtime: 'edge', // 使用边缘节点,速度最快
};

export default async function handler(request) {
  const url = new URL(request.url);
  
  // 1. 定义目标:我们要去访问 Google 的 Gemini
  // 只要路径对,参数对,我们就原样转发
  const targetUrl = new URL('https://generativelanguage.googleapis.com' + url.pathname + url.search);

  // 2. 处理请求头:我们要伪装成是直接访问 Google
  const headers = new Headers(request.headers);
  headers.set('host', 'generativelanguage.googleapis.com'); 
  // 有些请求头可能会导致问题,可以选择性删除,但通常覆盖 host 就够了

  // 3. 发起转发请求
  const response = await fetch(targetUrl, {
    method: request.method,
    headers: headers,
    body: request.body,
  });

  // 4. 把 Google 的回复直接返回
  return response;
}

💻 第二步:像黑客一样部署 (Deploy)

我们要用最帅的方式部署——命令行 (CLI) 。这比拖拽上传更像高手,而且方便以后更新。

  1. 安装 Vercel 工具:

    • 打开终端(CMD 或 PowerShell)。
    • 输入指令:npm install -g vercel 并回车。(前提是电脑装了 Node.js,如果没有,去官网下个 Node.js 安装包一路下一步就行,这是建站基础)。
  2. 登录:

    • 输入指令:vercel login
    • 它会跳出浏览器让登录 Vercel 账号,点一下确认,终端里就会显示“Success”。
  3. 一键发布:

    • 在终端里,通过 cd 命令进入刚才建的文件夹(或者直接在文件夹里右键“在终端打开”)。
    • 输入核心指令:vercel --prod
    • 接下来一路按回车(它问你 Set up and deploy? 选 Y。问你 Which scope? 默认回车...)。

等待大概 30 秒,当屏幕上出现一行绿色的 URL(类似 https://gemini-proxy-five.vercel.app)时……

🛠️ 添加“路标”文件 (vercel.json)

我们需要在文件夹里加一个配置文件,把所有的流量都导向那个代理脚本。

1. 新建文件

在您的 gemini-proxy 文件夹根目录下,新建一个文件,命名为 vercel.json

2. 粘贴代码

把下面这段代码粘贴进去:

{
  "rewrites": [
    { "source": "/(.*)", "destination": "/api/index.js" }
  ]
}

(这段话的意思是:不管访问什么路径 /(.*),全部转发给 /api/index.js 处理。)

3. 重新发布

打开终端,输入: vercel --prod (一路回车)


🧪 怎么验证它成功了?

重新发布完后,不要直接访问主页了(那还是会 404,因为 Google 主页就是 404)。

我们要模拟一次**“真实的 API 调用”**。

最简单的验证方法:

在浏览器地址栏里,输入你的Vercel 域名,后面加上这段测试路径: /v1beta/models/gemini-flash-latest?key=【这里填API_KEY】

完整的看起来像这样: https://gemini-proxy-five.vercel.app/v1beta/models/gemini-flash-latest?key=AIzaSyDxxxxxxxxx

如果看到屏幕上出现了一串 JSON 文字(虽然可能是报错说 Method Not Allowed,或者显示模型信息),只要不是 Vercel 的 404 页面,而是白底黑字的代码,那就说明:

隧道通了! 🎉

返回的json

{
"name": "models/gemini-flash-latest",
"version": "Gemini Flash Latest",
"displayName": "Gemini Flash Latest",
"description": "Latest release of Gemini Flash",
"inputTokenLimit": 1048576,
"outputTokenLimit": 65536,
"supportedGenerationMethods": [
"generateContent",
"countTokens",
"createCachedContent",
"batchGenerateContent"
],
"temperature": 1,
"topP": 0.95,
"topK": 64,
"maxTemperature": 2,
"thinking": true
  • 你的请求成功从国内发到了 Vercel。

  • Vercel 成功转发给了 Google。

  • Google 成功把它的模型信息(Gemini Flash Latest)传回给了你。

为啥是反向代理?

客户端(脚本)不知道真正的目标是 Google,它以为是Vercel,而Vercal把请求转发给了Google。