准备工作
- 一台能够被国内访问的服务器,同时这个服务器能够访问OPENAI的API。
- 安装Nginx
Nginx配置
配置Nginx,利用反向代理功能,实现使用我们自己的域名来访问 OPENAI 的API。配置如下:
添加一个server块:
server
{
listen 8001;
server_name srv.chatgpt ;
index index.html;
root /www/srv1.chatgpt;
location / {
proxy_pass https://api.openai.com/;
proxy_ssl_server_name on;
proxy_set_header Host api.openai.com;
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
现在我们修改我们的电脑hosts文件,将srv.chatgpt域名指向我们的服务器ip.
127.0.0.1 srv.chatgpt
访问我们的server测试是否能够成功访问:
curl http://srv1.chatgpt:8001
{
"message": "Welcome to the OpenAI API! Documentation is available at https://platform.openai.com/docs/api-reference"
}
这里可以看到和我们直接请求https://api.openai.com/
的结果是完全一样的。我们再实际请求接口尝试一下返回结果:
curl http://srv.chatgpt:8001/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-my-token" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
{
"error": {
"message": "Your account is not active, please check your billing details on our website.",
"type": "billing_not_active",
"param": null,
"code": "billing_not_active"
}
}
可以看到接口请求成功,但我的账号木有钱了,至此,我们就可以通过访问我们自己的域名来请求OPENAI 的 API了。
多个账号负载
有时我们需要对外提供访问服务,单个账号的并发TOKEN非常容易超出限制,所以最容易解决这个问题的方式就是多弄几个账号换着提供服务,跟咱们经常说的负载均衡一个道理。要实现这个功能,咱们只需要再同上面一样再添加一个server(有几个账号就添加几个server),不同的地方是我们在上面的配置中,添加不同的账号认证信息,OPENAI的API使用Authorization Header来验证身份,这就非常简单了,我们在反向代理中通过 proxy_set_header
指令来给不同的server设置不同的反代验证凭据,如:
proxy_set_header Authorization 'Bearer sk-my-token1';
举个例子,我们这里使用两个账号:
server1 配置同上,添加验证凭据,server2 添加token2凭据:
server
{
listen 8001;
server_name srv.chatgpt ;
index index.html;
root /www/srv1.chatgpt;
location / {
proxy_pass https://api.openai.com/;
proxy_ssl_server_name on;
proxy_set_header Host api.openai.com;
proxy_set_header Authorization 'Bearer sk-my-token1';
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server
{
listen 8002;
server_name srv.chatgpt ;
index index.html;
root /www/srv2.chatgpt;
location / {
proxy_pass https://api.openai.com/;
proxy_ssl_server_name on;
proxy_set_header Host api.openai.com;
proxy_set_header Authorization 'Bearer sk-my-token2';
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
这样我们就有了监听不同端口使用不同验证凭据的的两个反代server,我们将这两个server通过轮询的方式来对我们的请求负载,所以我们需要添加一个负载均衡server:
upstream chatgpt_servers {
server srv.chatgpt:8001;
server srv.chatgpt:8002;
}
server
{
listen 80;
server_name srv.chatgpt ;
index index.html;
root /www/srv.chatgpt;
location / {
proxy_pass http://chatgpt_servers;
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
现在我们测试下负载效果,这里我将两个反代分别代理向不同的位置便于区分:
➜ ~ curl http://srv.chatgpt
{
"message": "Welcome to the OpenAI API! Documentation is available at https://platform.openai.com/docs/api-reference"
}
➜ ~ curl http://srv.chatgpt
srv2 response
➜ ~ curl http://srv.chatgpt
{
"message": "Welcome to the OpenAI API! Documentation is available at https://platform.openai.com/docs/api-reference"
}
➜ ~ curl http://srv.chatgpt
srv2 response
➜ ~ curl http://srv.chatgpt
{
"message": "Welcome to the OpenAI API! Documentation is available at https://platform.openai.com/docs/api-reference"
}
➜ ~ curl http://srv.chatgpt
srv2 response
➜ ~
可以看到,成功的实现了两个账号轮询访问服务(实际是server的轮询)。