搭建自己的openai api高速反向代理

在去年(2023年),我看到了极客湾的这个视频:我们做了个能对话的AI派蒙,免费给大家玩!
觉得很有意思,但是由于没有显卡且不敢翻墙,一直没有机会尝试,但最近搞来了一块RTX A2000(目前这卡性价比很低,不推荐),便想着折腾一下
由于不敢翻墙,只能使用反向代理的方式来访问openai api

准备

你需要:

  • 一个Cloudflare账户
  • Cloudflare账户中有未被墙的有效域名(若有下一项,则为可选项)
  • 一台高速的非中国大陆服务器(配置不用太高,可选)(若无此项,则上一项为必选)
  • 一个好用的脑子

Cloudflare worker

创建一个Cloudflare worker,并把一下代码塞入其中(代码来自这里)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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做演示
(或许你可以去导航栏的推广页看看,那里获取会有这种服务器,如果那个页面在你看到的时候还在)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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连接时没有发送服务名到后端服务器,导致导致后端服务器使用错误的证书或拒绝连接,所以需要做以下修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
}

添加了以下两行配置

1
2
proxy_ssl_server_name on;   # 使Nginx在建立SSL/TLS连接时发送服务名到后端服务器
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 指定Nginx应该使用的SSL/TLS协议版本

访问://YOURHOSTNAME/v1/chat/completions
若出现以下回复就配置成功了

1
2
3
4
5
6
7
8
{
"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


搭建自己的openai api高速反向代理
https://mmeiblog.cn/2024/01/25/202401250927/index.html
作者
mei
发布于
2024年1月25日
许可协议