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

引言
上周想开发一个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;
}
};简单解释下这段代码在干啥:
- 接收前端发来的请求
- 把请求地址的域名换成
api.openai.com - 把修改后的请求转发给OpenAI
- 把OpenAI的响应原封不动地返回给前端
- 顺便处理了跨域问题(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的问题:
- 检查环境变量的Key名称和代码里的是否一致
- 确认API Key有效且有余额
- 看看OpenAI/Claude有没有地域限制(虽然Workers全球分布,但有些节点可能被识别) 调试技巧:在代码里加点日志:
console.log('API Key:', env.OPENAI_API_KEY ? '已设置' : '未设置');然后在Worker的”Logs”标签里查看实时日志。
免费额度不够用怎么办
如果你发现10万次真的不够(比如在做商业项目),可以考虑付费计划:
- Workers付费计划:$5/月,包含1000万次请求
- 超出部分:每100万次请求$0.50 说实话,对于中小型应用,这个价格比自己买VPS划算多了。而且不用操心服务器维护,省下的时间成本更值钱。 优化建议:
- 前端做缓存,相同的请求不要重复调用
- 使用批量接口(如果API支持)减少请求次数
- 在开发阶段使用Mock数据,别总是调真实API
结论
说了这么多,Workers代理方案的核心优势就三点:
- 零成本:免费额度对个人开发绰绰有余
- 零门槛:5分钟配置完成,代码不到30行
- 零风险:API Key安全存储,不会泄露 这个方案特别适合个人学习、开发demo、小型项目。如果你也在找稳定的AI API访问方式,真的可以试试Workers。 现在就动手搭一个吧!把这篇文章收藏好,遇到问题随时回来看。如果搭建过程中碰到了其他坑,欢迎在评论区说说,我也想知道还有哪些地方可以优化。 对了,文章里提到的几个开源项目都很不错,尤其是chatgptProxyAPI和worker-openai-proxy,代码写得很清楚,可以去GitHub上学习一下。 你现在用的是什么方案访问AI API?评论区聊聊?
发布于: 2025年12月1日 · 修改于: 2025年12月4日


