4.9 KiB
4.9 KiB
title | tags | categories | index_img | banner_img | permalink | date | |||
---|---|---|---|---|---|---|---|---|---|
搭建自己的openai api高速反向代理 |
|
|
/img/2024/1/25/openai.jpg | /img/2024/1/25/openai.jpg | /2024/01/25/202401250927/index.html | 2024-01-25 09:27:45 |
在去年(2023年),我看到了极客湾的这个视频:我们做了个能对话的AI派蒙,免费给大家玩! 觉得很有意思,但是由于没有显卡且不敢翻墙,一直没有机会尝试,但最近搞来了一块RTX A2000(目前这卡性价比很低,不推荐),便想着折腾一下 由于不敢翻墙,只能使用反向代理的方式来访问openai api
准备
你需要:
- 一个Cloudflare账户
- Cloudflare账户中有未被墙的有效域名(若有下一项,则为可选项)
- 一台高速的非中国大陆服务器(配置不用太高,可选)(若无此项,则上一项为必选)
- 一个好用的脑子
Cloudflare worker
创建一个Cloudflare worker,并把一下代码塞入其中(代码来自这里)
const TELEGRAPH_URL = 'https://api.openai.com';
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url);
url.host = TELEGRAPH_URL.replace(/^https?:\/\//, '');
const modifiedRequest = new Request(url.toString(), {
headers: request.headers,
method: request.method,
body: request.body,
redirect: 'follow'
});
const response = await fetch(modifiedRequest);
const modifiedResponse = new Response(response.body, response);
// 添加允许跨域访问的响应头
modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');
return modifiedResponse;
}
使用Cloudflare理论上可以降低被封的概率 由于workers.dev被墙了,所以需要在“触发器”中换用你的域名(如果有非中国大陆服务器则可以跳过这一步) 如果你没有非中国大陆服务器,那么这篇文章就结束了
反向代理加速
众所周知,cloudflare在中国大陆的访问速度极慢,所以可以使用自己的服务器套一层加速 我这里使用一台香港CN2GIA线路的服务器和nginx做演示 (或许你可以去导航栏的推广页看看,那里获取会有这种服务器,如果那个页面在你看到的时候还在)
location ^~ / {
proxy_pass https://xxx.xxx.workers.dev;
proxy_set_header Host xxx.xxx.workers.dev;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
add_header X-Cache $upstream_cache_status;
add_header Strict-Transport-Security "max-age=31536000";
add_header Cache-Control no-cache;
}
使用面板创建的反向代理是这样的,但是你会发现这是访问显示502 这是因为Nginx在建立SSL/TLS连接时没有发送服务名到后端服务器,导致导致后端服务器使用错误的证书或拒绝连接,所以需要做以下修改:
location ^~ / {
proxy_pass https://xxx.xxx.workers.dev;
proxy_set_header Host xxx.xxx.workers.dev;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_ssl_server_name on; # 使Nginx在建立SSL/TLS连接时发送服务名到后端服务器
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 指定Nginx应该使用的SSL/TLS协议版本
add_header X-Cache $upstream_cache_status;
add_header Strict-Transport-Security "max-age=31536000";
add_header Cache-Control no-cache;
}
添加了以下两行配置
proxy_ssl_server_name on; # 使Nginx在建立SSL/TLS连接时发送服务名到后端服务器
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 指定Nginx应该使用的SSL/TLS协议版本
访问://YOURHOSTNAME/v1/chat/completions
若出现以下回复就配置成功了
{
"error": {
"message": "You didn't provide an API key. You need to provide your API key in an Authorization header using Bearer auth (i.e. Authorization: Bearer YOUR_KEY), or as the password field (with blank username) if you're accessing the API from your browser and are prompted for a username and password. You can obtain an API key from https://platform.openai.com/account/api-keys.",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
参考文章
最新宝塔反代openai官方API开发接口详细搭建教程,解决502 Bad Gateway问题 ChatGPT-Proxy