- 更新:2023-06-05 10:16:11
- 首发:2023-04-30 11:59:48
- 教程
- 8028
在本教程中,我们将介绍如何使用Nginx反向代理访问OpenAI API,并提供相应的测试方法。主要目标是保证Server-sent events (SSE)类型响应的流畅输出,从而提供良好的用户体验。
步骤1:安装最新版Nginx
首先,我们需要安装最新版的Nginx。在Ubuntu上,可以使用以下命令安装:
echo "deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
curl -o /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key
sudo mv /tmp/nginx_signing.key /etc/apt/trusted.gpg.d/nginx_signing.asc
sudo apt update
sudo apt install nginx
对于使用的Debian系统,请按照以下步骤操作:
使用文本编辑器打开
/etc/apt/sources.list
并在底部添加以下内容:deb http://nginx.org/packages/mainline/debian/ stretch nginx
导入软件源的签名密钥,并将其添加到apt:
sudo wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key
安装Nginx:
sudo apt update sudo apt install nginx
在安装完成后,可以使用以下命令启动并设置Nginx服务为开机自启:
sudo systemctl enable nginx --now
步骤2:配置Nginx
接下来,我们配置Nginx来反向代理OpenAI API。在Nginx的配置文件(/etc/nginx/conf.d/openai.conf
)中添加以下内容:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
ssl_certificate /home/azureuser/.acme.sh/example.com_ecc/fullchain.cer;
ssl_certificate_key /home/azureuser/.acme.sh/example.com_ecc/example.com.key;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
charset utf-8;
location / {
proxy_pass https://api.openai.com;
proxy_ssl_name api.openai.com;
proxy_ssl_server_name on;
proxy_set_header Host api.openai.com;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
chunked_transfer_encoding off;
proxy_set_header X-Real-IP [your_us_server_ip];
proxy_read_timeout 3600;
proxy_buffering off;
proxy_cache off;
proxy_redirect off;
proxy_hide_header Cache-Control;
}
location /v2 {
return 404;
}
}
listen 443 ssl http2;
和listen [::]:443 ssl http2;
:监听IPv4和IPv6的443端口,启用SSL和HTTP/2。server_name example.com;
:指定服务器名称,将其更改为您的实际域名。ssl_certificate
和ssl_certificate_key
:分别指定SSL证书和私钥的路径。ssl_ciphers
和ssl_protocols
:定义支持的加密套件和SSL/TLS协议。ssl_prefer_server_ciphers on;
:表示服务器优先选择的加密套件。ssl_session_cache
和ssl_session_timeout
:配置SSL会话缓存和超时时间。add_header Strict-Transport-Security "max-age=31536000";
:添加HSTS头,要求浏览器在给定的时间内(这里是1年)只使用HTTPS访问服务器。charset utf-8;
:设置字符集为UTF-8。location / {...}
:定义一个location块,用于处理根路径的请求。proxy_pass https://api.openai.com;
:将请求代理到OpenAI API。proxy_ssl_name
和proxy_ssl_server_name on;
:设置与后端服务器建立SSL连接的相关参数。proxy_set_header
:设置传递给后端服务器的请求头。chunked_transfer_encoding off;
:禁用分块传输编码,以确保SSE消息不会被切割。proxy_set_header X-Real-IP [your_us_server_ip];
:设置实际客户端IP地址,将[your_us_server_ip]
替换为您的美国服务器IP地址。proxy_buffering off;
和proxy_cache off;
:禁用缓冲和缓存,以确保实时消息能够及时传递给客户端。proxy_redirect off;
:禁用代理重定向,确保服务器响应不会因重定向而更改。location /v2 {...}
:定义另一个location块,用于处理以/v2
开头的请求。return 404;
:针对这些请求,直接返回404状态码表示未找到资源。
在本Nginx配置中,重点是确保对OpenAI API的请求能够流畅地通过反向代理。这包括正确地转发请求,处理响应以及针对SSE的特殊处理(使用stream参数请求API时流程稳定的打字机效果,相关博文:《对接ChatGPT3.5/4的API实现打字机效果》)。
请将配置中的example.com
替换为您实际使用的域名,并将[your_us_server_ip]
替换为您的美国服务器IP地址。如果使用Azure OpenAI接口,只需要替换api.openai.com
为你的Azure OpenAI Endpoint
的Host。
在nginx.conf
中,添加以下配置:
client_max_body_size 1000M;
client_body_buffer_size 1024M;
keepalive_timeout 3600;
解释:
client_max_body_size
设置允许客户端请求的最大单个文件体积。client_body_buffer_size
设置客户端请求体缓冲区大小。keepalive_timeout
设置长连接超时时间。
步骤3:测试反向代理
接下来,您可以使用以下方法测试反向代理:
首先设置环境变量:
export OPENAI_API_KEY=sk-xxxxx export OPENAI_API_ORG=org-xxxx
测试模型列表:
curl https://example.com/v1/models \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "OpenAI-Organization: $OPENAI_API_ORG"
测试ChatGPT生成文本:
curl https://example.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{ "model": "gpt-4", "messages": [{"role": "user", "content": "Hello!"}] }'
通过以上方法,您可以测试和验证Nginx反向代理配置是否正确。本教程向您展示了如何使用Nginx反向代理访问OpenAI API,并提供了相应的测试方法。主要目标是保证Server-sent events (SSE)类型响应的流畅输出,从而提供良好的用户体验。
暂无内容
感谢回复! Clang 在生成时沿用了 GCC 的版本号标识,我是不是可以理解为Clang 18.1.4生成时使用的就是GCC4.8,所以我后续使用gcc 9.4
gcov
就会有不兼容的问题抱歉,这块我也不太清楚,尝试寻求AI的帮助吧。
我在这个过程中遇到了各种问题- -,现在在UDC core: g_serial: couldn't find an available UDC卡住了,请问大佬有什么解决方案吗,还是说我前置的设置就错了呢,> 这个需求很特殊。是可以的,但是比较困难,需要修改驱动配置。
好思路呀!!
关于hex编辑器,网上没找到特别好用的(小白没办法),最后在vscode上扩展一搜hex,第一个安装一下就可以用vscode进行hex编译了