BetterLink Logo 比邻
切换语言
切换主题

OpenAI接口总是超时?用Workers搭建私人通道,0成本更稳定

Cloudflare Workers代理AI API配置示意图

引言

上周想开发一个ChatGPT应用玩玩,写完前端代码兴冲冲地调API,结果连接超时。试了几次还是不行,才反应过来——OpenAI在国内压根访问不了。 说实话,这种被网络拦住的感觉真的很难受。试过淘宝买的代理服务,总担心不靠谱,API Key万一泄露就完了。也想过自己买VPS搭建,但算了算成本,一个月最便宜也要几十块,关键还要折腾服务器配置和维护,想想就头大。 后来发现Cloudflare Workers这个方案,完全不花钱,5分钟就能搞定。用了两个多月,感觉真香——不仅稳定,速度还比很多付费代理快。这篇文章就把完整的搭建过程分享给你,附带可以直接用的代码。

为什么选择Cloudflare Workers?

零成本,对个人开发者够用

Workers的免费计划每天给你10万次请求额度,每分钟1000次。你可能会想,免费的能好用吗?我一开始也这么想。但实际用下来发现,对于个人开发、学习或者小项目来说,这个额度完全够用。 算笔账:假设你平均每次请求耗时2秒,一天工作8小时不间断调用,也就2000多次。10万次的额度,你得连续用好几天才能用完。

不用买服务器,省心

传统方案需要买VPS,然后装Nginx配置反向代理,还要担心服务器挂掉。Workers完全不需要这些——Cloudflare帮你搞定所有基础设施,你只要写几行代码就行。 而且Workers运行在Cloudflare的全球CDN网络上,理论上比你自己搭的单台服务器还快。毕竟Cloudflare在全球300多个城市都有节点。

天然保护API密钥

这点特别重要。如果你在前端直接调OpenAI API,密钥肯定会暴露在浏览器里,任何人打开开发者工具就能看到。有了Workers做中间层,前端只调用你的Worker地址,真正的API Key安全地存在Cloudflare的环境变量里。

2025年的新福利

对了,2025年8月Cloudflare还和OpenAI合作,把OpenAI的开源模型直接集成到Workers AI里了。这意味着除了代理原版API,你还能直接用Cloudflare提供的模型,每天有10,000 Neurons的免费额度。

搭建前的准备工作

准备工作超简单,你需要: 账号和资源:

  • Cloudflare账号(免费注册,几分钟搞定)
  • OpenAI或Claude的API Key(这个你应该已经有了)
  • 域名(可选,Workers会给你一个免费的.workers.dev子域名) 技术要求:
  • 会一点JavaScript就行(能看懂fetch请求就够了)
  • 了解HTTP是怎么回事 时间成本:
  • 首次搭建:5-10分钟
  • 熟悉后:3分钟

实战:5分钟搭建OpenAI代理

第一步:创建Worker

登录Cloudflare控制台,在左侧菜单找到”Workers & Pages”。点击”Create Application”,选择”Create Worker”。 Cloudflare会自动给你的Worker起个随机名字(比如aged-shadow-1234),你可以改成自己想要的名字,比如”openai-proxy”。点击”Deploy”部署。 这时候你已经有了一个能运行的Worker,虽然它还啥都不做。

第二步:写代码

点击”Edit Code”进入代码编辑器,把下面这段代码复制进去:

export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    // 替换域名为OpenAI的API地址
    url.hostname = 'api.openai.com';
    // 创建新的请求
    const newRequest = new Request(url, {
      method: request.method,
      headers: request.headers,
      body: request.body
    });
    // 转发请求并返回响应
    const response = await fetch(newRequest);
    // 处理CORS跨域问题
    const newResponse = new Response(response.body, response);
    newResponse.headers.set('Access-Control-Allow-Origin', '*');
    newResponse.headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    newResponse.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization');
    return newResponse;
  }
};

简单解释下这段代码在干啥:

  1. 接收前端发来的请求
  2. 把请求地址的域名换成api.openai.com
  3. 把修改后的请求转发给OpenAI
  4. 把OpenAI的响应原封不动地返回给前端
  5. 顺便处理了跨域问题(CORS) 点击”Save and Deploy”保存。

第三步:测试一下

部署完成后,你会看到一个Worker的URL,比如https://openai-proxy.你的名字.workers.dev。 用curl测试一下(把YOUR_API_KEY换成你的OpenAI密钥):

curl https://openai-proxy.你的名字.workers.dev/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

如果看到OpenAI的正常响应,恭喜你,已经成功了!

进阶:支持多个AI服务

Claude API代理

Claude的API结构和OpenAI有点不一样,主要是请求头不同。修改代码支持Claude:

export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    // 根据路径判断是哪个服务
    if (url.pathname.startsWith('/claude')) {
      // 去掉/claude前缀,转发到Anthropic
      url.pathname = url.pathname.replace('/claude', '');
      url.hostname = 'api.anthropic.com';
    } else {
      // 默认是OpenAI
      url.hostname = 'api.openai.com';
    }
    const newRequest = new Request(url, {
      method: request.method,
      headers: request.headers,
      body: request.body
    });
    const response = await fetch(newRequest);
    const newResponse = new Response(response.body, response);
    newResponse.headers.set('Access-Control-Allow-Origin', '*');
    return newResponse;
  }
};

现在访问/claude/v1/messages就会转发到Claude API了。

Gemini API代理

Google的Gemini API endpoint是generativelanguage.googleapis.com,加个判断就行:

if (url.pathname.startsWith('/gemini')) {
  url.pathname = url.pathname.replace('/gemini', '');
  url.hostname = 'generativelanguage.googleapis.com';
}

这样一个Worker就能代理三个AI服务了。

安全最佳实践

不要硬编码API Key

你可能看到有些教程把API Key直接写在Worker代码里,千万别这么干!代码是明文存储的,而且可能被不小心分享出去。 正确做法是用环境变量。在Worker设置里找到”Variables and Secrets”,添加一个环境变量:

  • 名称:OPENAI_API_KEY
  • 值:你的API Key
  • 类型:选”Secret”(加密存储) 然后代码里这么用:
export default {
  async fetch(request, env) {
    // 从环境变量读取API Key
    const apiKey = env.OPENAI_API_KEY;
    // 修改请求头,加上API Key
    const headers = new Headers(request.headers);
    headers.set('Authorization', `Bearer ${apiKey}`);
    // 后面的代码和之前一样...
  }
};

这样前端调用时就不需要传API Key了,更安全。

加个自定义认证Token

如果担心Worker URL被别人知道后滥用,可以加一层简单的认证:

export default {
  async fetch(request, env) {
    // 检查自定义Token
    const authToken = request.headers.get('X-Custom-Auth');
    if (authToken !== env.MY_SECRET_TOKEN) {
      return new Response('Unauthorized', { status: 401 });
    }
    // 验证通过,继续处理请求...
  }
};

在环境变量里设置MY_SECRET_TOKEN,前端调用时带上这个自定义header。

监控用量

Cloudflare控制台有个Analytics标签,能看到每天的请求量、错误率等数据。建议定期看一眼,万一超过免费额度可以及早发现。 你也可以设置告警:在”Notifications”里创建一个规则,当请求量接近10万时发邮件提醒你。

常见问题和解决方案

请求速度慢或超时

如果发现响应特别慢,可能是Worker分配的节点不太理想。 解决办法:绑定自定义域名。Cloudflare会根据你的域名DNS配置优化路由,通常会比免费的.workers.dev域名快一些。 在Worker设置里选”Triggers” → “Add Custom Domain”,输入你的域名(比如api.yourdomain.com),按提示添加DNS记录就行。

403或401错误

这种情况通常是API Key的问题:

  1. 检查环境变量的Key名称和代码里的是否一致
  2. 确认API Key有效且有余额
  3. 看看OpenAI/Claude有没有地域限制(虽然Workers全球分布,但有些节点可能被识别) 调试技巧:在代码里加点日志:
console.log('API Key:', env.OPENAI_API_KEY ? '已设置' : '未设置');

然后在Worker的”Logs”标签里查看实时日志。

免费额度不够用怎么办

如果你发现10万次真的不够(比如在做商业项目),可以考虑付费计划:

  • Workers付费计划:$5/月,包含1000万次请求
  • 超出部分:每100万次请求$0.50 说实话,对于中小型应用,这个价格比自己买VPS划算多了。而且不用操心服务器维护,省下的时间成本更值钱。 优化建议:
  1. 前端做缓存,相同的请求不要重复调用
  2. 使用批量接口(如果API支持)减少请求次数
  3. 在开发阶段使用Mock数据,别总是调真实API

结论

说了这么多,Workers代理方案的核心优势就三点:

  • 零成本:免费额度对个人开发绰绰有余
  • 零门槛:5分钟配置完成,代码不到30行
  • 零风险:API Key安全存储,不会泄露 这个方案特别适合个人学习、开发demo、小型项目。如果你也在找稳定的AI API访问方式,真的可以试试Workers。 现在就动手搭一个吧!把这篇文章收藏好,遇到问题随时回来看。如果搭建过程中碰到了其他坑,欢迎在评论区说说,我也想知道还有哪些地方可以优化。 对了,文章里提到的几个开源项目都很不错,尤其是chatgptProxyAPIworker-openai-proxy,代码写得很清楚,可以去GitHub上学习一下。 你现在用的是什么方案访问AI API?评论区聊聊?

发布于: 2025年12月1日 · 修改于: 2025年12月4日

相关文章