Gemini API 反向代理实战指南(Nginx & CF Worker)

由于网络环境限制,直接在本地或国内服务器调用 Gemini API 常常会遇到连接超时的问题。

为了实现稳定调用,搭建一个反向代理是最主流的解决方案。

方案一:Nginx 反向代理(适合已有服务器的用户)

如果你手中已经有一台海外 VPS,使用 Nginx 转发请求是最稳健的选择。

在你的 Nginx 虚拟主机配置中加入以下内容:

Nginx Conf

server {
    listen 80;
    server_name your-domain.com; # 换成你的域名

    location / {
        # 允许跨域配置(可选,如果你是前端直接调)
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,x-goog-api-key' always;

        if ($request_method = 'OPTIONS') {
            return 204;
        }

        # 设置后端目标地址
        proxy_pass https://generativelanguage.googleapis.com;
        
        # 必须设置的 Header
        proxy_set_header Host generativelanguage.googleapis.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 关键:禁用缓存,确保流式输出(Stream)正常工作
        proxy_buffering off;
        proxy_cache off;
        proxy_http_version 1.1;
        
        # 延长超时时间,防止长文本生成时连接断开
        proxy_read_timeout 300s;
    }
}

优点: 稳定、完全可控,适合生产环境。 缺点: 需维护服务器,且有固定成本。

方案二:Cloudflare Workers(小白/白嫖党首选)

如果你没有服务器,或者不想处理 SSL 证书,Cloudflare Worker 是“神级”替代品。

在 Cloudflare Worker 编辑器中粘贴以下逻辑:

JavaScript

export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    
    // 1. 将请求的目标替换为 Google 的 API 地址
    const targetUrl = 'https://generativelanguage.googleapis.com' + url.pathname + url.search;

    // 2. 复制原始请求的 Header,并进行必要修改
    const newHeaders = new Headers(request.headers);
    newHeaders.set('Host', 'generativelanguage.googleapis.com');
    
    // 如果你想在 Worker 中直接注入 API Key(可选)
    // newHeaders.set('x-goog-api-key', '你的_GEMINI_API_KEY');

    // 3. 构建新的请求
    const newRequest = new Request(targetUrl, {
      method: request.method,
      headers: newHeaders,
      body: request.body,
      redirect: 'follow'
    });

    // 4. 发送请求并返回响应
    // 默认支持流式传输 (Streaming),无需额外配置
    return await fetch(newRequest);
  }
};

部署注意:

  • 域名问题:默认的 *.workers.dev 域名在部分地区依然无法访问,务必在设置中绑定自定义域名

    • 增加一条路由:
      Route gemini.yourdomain.com/*
  • 安全性:如果不想在前端暴露 API Key,可以在 Worker 中通过 newHeaders.set('x-goog-api-key', 'YOUR_KEY') 强制注入。

这些地区通常因为法律合规或制裁原因被排除在Google Gemini服务范围之外:

  • 中国大陆、香港、澳门

  • 朝鲜

  • 伊朗

  • 叙利亚

  • 古巴

  • 俄罗斯

  • 克里米亚地区以及乌克兰受争议的其他部分地区

发表评论