OpenAI API 国内代理配置

技术文章7个月前更新 Flower
647 0

不要直接在国内访问 OpenAI API,可能会 导致封号,需要配置代理,本文介绍 Nginx 代理。

前置项

首先你得有一台美国的云主机,之前腾讯云洛杉矶的可用,但今年2月初被封了,估计是 OpenAI 知道是腾讯网段(确实通过 IP 能反查运营商),这里推荐 Linode,美国云服务商。

1. Nginx 反向代理配置

以下为 Nginx 配置。

    location /gpt/ {
        proxy_pass https://api.openai.com/;
        proxy_ssl_server_name on;
        proxy_set_header Host api.openai.com;
        proxy_buffering off;
        proxy_send_timeout 600s;
        proxy_cache off; 
        chunked_transfer_encoding on;  
    }

这段 Nginx 配置定义了如何处理对 /gpt/ 路径的请求。下面是各部分的解读:

  • location /gpt/:这一行指定了一个位置块,用于匹配所有以 /gpt/ 开头的请求。这意味着任何以 /gpt/ 开头的请求都会被这个块内的指令处理。

  • proxy_pass https://api.openai.com/;:这一行告诉 Nginx 将所有匹配的请求转发(代理)到 https://api.openai.com/。这意味着,如果有人请求你的服务器的 /gpt/something,Nginx 会代理这个请求到 https://api.openai.com/something

  • proxy_ssl_server_name on;:这个指令启用了 SSL/TLS 的服务器名称指示(SNI)支持。SNI 允许服务器在使用相同的 IP 地址和端口的情况下托管多个 SSL/TLS 网站。开启这个选项意味着在与 api.openai.com 建立 SSL/TLS 连接时,Nginx 会在 TLS 握手过程中传递正确的服务器名称。

  • proxy_set_header Host api.openai.com;:这一行设置了一个请求头,将 Host 头部的值改为 api.openai.com。这对于被代理的服务器正确处理请求是必要的,尤其是当目标服务器托管多个域时。这确保了请求会被视为针对 api.openai.com,即使原始请求是发往你的服务器的。

  • proxy_buffering off;:这个指令禁用了代理缓冲。默认情况下,Nginx 会缓冲对代理服务器的响应,直到收到完整的响应后再将其发送给客户端。关闭代理缓冲可以减少延迟,对于实时数据流或长时间运行的连接特别有用。

  • proxy_send_timeout 600s;:这一行设置了代理发送超时时间为 600 秒(10分钟)。这意呸着如果 Nginx 尝试将请求数据发送给代理服务器(在这个例子中是 api.openai.com)时,如果超过了 600 秒还没有成功,连接将被关闭。

  • proxy_cache off;

    • 作用:这个指令用于控制 Nginx 的代理缓存行为。当设置为 off 时,它告诉 Nginx 对当前位置块内的请求不使用缓存。这意味着对于每个请求,Nginx 都会直接转发到上游服务器(在这个场景中是 https://api.openai.com/),而不尝试从本地缓存中查找可能存在的响应。

    • 场景:在实时或动态内容的代理中,禁用缓存是常见的做法,因为你希望用户获取到最新的数据,而不是过时的缓存数据。对于与 OpenAI API 通信这样的应用场景,实时性非常关键,因此禁用缓存是合理的选择。

  • chunked_transfer_encoding on;

    • 作用:这个指令控制了 Nginx 是否使用分块传输编码(Chunked Transfer Encoding)发送响应。当设置为 on 时,即使服务器在开始发送响应之前不知道整个响应的大小,也可以开始传输响应。服务器会将响应分成一系列的块(chunks)依次发送,每个块前都会标明其大小,直到一个特殊的零长度块表示响应结束。

    • 场景:分块传输编码在发送大量数据或者数据长度未知时非常有用,例如:流媒体、实时数据传输等。它允许客户端开始处理接收到的数据块,而不需要等待所有数据都被发送完毕。在代理配置中启用这个选项可以增加灵活性,尤其是对于动态生成的内容或者实时数据流。

总的来说,这段配置使得任何发送到你的服务器上 /gpt/ 路径的请求都会被转发到 OpenAI 的 API 服务器上,同时确保了正确的 SSL/TLS 设置和头部信息,以便请求能够正确处理,并且有一些针对性能和超时的优化。

最后三个参数是实现代理 OpenAI API 时实现打字机效果

2. 测试

直接在国内访问 Linode 服务器提供的 Nginx 服务,验证请求是否成功

  curl https://<your_domain>/gpt/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer <your_openai_secret_key>" -d '{ "model": "gpt-3.5-turbo","messages": [{"role": "user", "content": "如何显示Python的版本"}],"temperature": 0.7}'

接下来,可以在你的 GPT 应用中输入代理 URL,比如 Dify
OpenAI API 国内代理配置

作图测试,效果还不错。
OpenAI API 国内代理配置

看看原图。
OpenAI API 国内代理配置

© 版权声明

相关文章

暂无评论

暂无评论...