打破壁垒:使用 PHP 和 Nginx 在本地开发 OpenAI API

最近在开发一个OpenAI的产品,但是由于众所周知的原因, OpenAI API 有 IP 限制,使得在本地开发变得困难。开始我的想法是,把代码放服务器上去跑,可是这样一来,要修改调试变得极为不便。且考虑到后期可能要将代码部署到国内的服务器,这还是要处理服务器ip的问题。于是想到了用Nginx代理转发来解决ip受限的问题。

一、服务器上部署配置Nginx转发OpenAI API

首先要有一台不在OpenAI限制区域的服务器,我这里用的是亚马逊位于日本的免费体验一年的服务器。用了宝塔面板(别喷,主要是使用简单,还有就是我懒)。

1、创建一个转发的网站

打破壁垒:使用 PHP 和 Nginx 在本地开发 OpenAI API

2、配置转发信息

打破壁垒:使用 PHP 和 Nginx 在本地开发 OpenAI API

3、在代码中将官方的api地址https://api.openai.com换成自己的 http://api.fo.chat

我用的是这个包 Orhanerday\OpenAi 所以是直接在实例化时,将地址替换

打破壁垒:使用 PHP 和 Nginx 在本地开发 OpenAI API

二、处理CURL超时问题

因为Chat GPT的生成原理是一个一个token生成的,通常需要很长时间才能生成完整答案,然后就造成我们用curl访问Api时很容易出现超时问题。我们在本地开发时,通常是使用集成开发环境,如 PHP Study 、WAMP 或 XAMPP 这样的一键搭建的软件包,很多配置都是默认的,所以我们在代码中配置了curl超时时间也不生效,因为Apache或Nginx还有超时,php也有执行超时的问题。

1.配置php超时问题

我用的是PHPStudy,直接在软件管理里配置的。如果你的集成环境没有,可以在php.ini中修改。

打破壁垒:使用 PHP 和 Nginx 在本地开发 OpenAI API
打破壁垒:使用 PHP 和 Nginx 在本地开发 OpenAI API

2.配置本地开发环境的 Apache或Nginx

在Apache的配置文件(httpd.conf)末尾加上以下配置(以下为开发环境特殊配置,按具体场景调整)

<IfModule mod_fcgid.c>
    # php-cgi进程的生存时间
    FcgidProcessLifeTime 9999999
   
    # php-cgi进程IO超时时间
    FcgidIOTimeout 9999999
   
    # php-cgi进程连接超时时间
    FcgidConnectTimeout 9999999
   
    # 上传文件的最大尺寸 100MB
    FcgidMaxRequestLen 104857600
   
    # php-cgi最大的进程数
    # FcgidMaxProcesses 5
</IfModule>
打破壁垒:使用 PHP 和 Nginx 在本地开发 OpenAI API

3.配置服务器代理超时时间

处理了本地超时问题,但是我们的代理服务也有默认超时时间,因此我们还需要配置好代理服务的超时问题。

打破壁垒:使用 PHP 和 Nginx 在本地开发 OpenAI API
server
{
    listen 80;
    server_name api.fo.chat;
    location / {
        proxy_pass  https://api.openai.com/;  # 反向代理到https://api.openai.com/这个地址
        proxy_ssl_server_name on;  # 开启代理SSL服务器名称验证,确保SSL连接的安全性
        proxy_set_header Host api.openai.com;  # 设置代理请求头中的Host字段为api.openai.com
        chunked_transfer_encoding off;  # 禁用分块编码传输,避免可能的代理问题
        proxy_buffering off;  # 禁用代理缓存,避免数据传输延迟
        proxy_cache off;  # 禁用代理缓存,确保实时获取最新的数据
        #proxy_set_header X-Forwarded-For $remote_addr;  # 将客户端真实IP添加到代理请求头中的X-Forwarded-For字段中,用于记录客户端真实IP
        
        client_max_body_size 30m;
        client_body_buffer_size 128k;
        
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        proxy_buffer_size 64k;
        proxy_buffers   4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;

    }

    access_log  /www/wwwlogs/api.fo.chat.log;
    error_log  /www/wwwlogs/api.fo.chat.error.log;
}
打破壁垒:使用 PHP 和 Nginx 在本地开发 OpenAI API

三、结论

使用 PHP 和 Nginx 在本地开发 OpenAI API 可以帮助我们打破 IP 限制和超时问题的壁垒。我们可以在本地开发和测试应用程序,而无需担心这些限制。希望这篇文章能够帮助您快速入门 OpenAI API 开发。

打破壁垒:使用 PHP 和 Nginx 在本地开发 OpenAI API

四、参考资料

1、通过代理访问openai api服务:GitHub – zhengjie9510/openai-proxy: 通过代理访问openai api服务。

2、PHP设置脚本最大执行时间的三种方法:https://www.cnblogs.com/zqifa/p/php-16.html

3、使用PhpStudy集成环境设置PHP页面超时配置无效的问题处理:使用PhpStudy集成环境设置PHP页面超时配置无效的问题处理_phpstudy 超时_迷之路人咩的博客-CSDN博客

4、解决 nginx 反向代理时的 upstream timeout 问题:解决 nginx 反向代理时的 upstream timeout 问题 – 掘金 (juejin.cn)

原创文章,作者:Zeyu,如若转载,请注明出处:https://jinzhijun.cn/develop/1294

(0)
ZeyuZeyu
上一篇 2023年3月5日 下午4:37
下一篇 2023年5月21日

相关推荐

  • codeigniter发邮件sendmail报错

    最近将公司系统从Windows换成了Linux,大部分功能都能正常使用,唯独发送邮件通知功能时,出现了错误。通过var_dump($CI->email->print_d…

    2020年11月12日
    1.6K
  • 群晖docker 安装gitlab

    一、安装 1.1 在套件中先安装Docker套件。 1.2 在docker中,注册页签下,搜索:gitlab,双击下载,选latest 1.3下载完成后,在映像页签下,选中gitl…

    2022年3月13日
    3.4K
  • PHP设计模式之命令模式

    命令模式,也称为动作或者事务模式,很多教材会用饭馆来举例。作为顾客的我们是命令的下达者,服务员是这个命令的接收者,菜单是这个实际的命令,而厨师是这个命令的执行者。那么,这个模式解决…

    2022年1月7日
    1.2K
  • thinkphp使用input(‘param.’)多一个url参数

    今天写代码的时候出现一个奇葩问题,用input(‘param.’)获取post数据时,请求参数中多了一个请求url参数,导致数据提交总是出现问题。 经搜索得…

    2021年12月30日
    1.6K
  • php 创建BTC、LTC、ETH助记词、私钥和地址 使用示例(转)

    项目依赖: bitcoin-php bitcoin的php实现库,用于创建助记词和生成私钥 (此库需要运行在64位的php7.0+上) ethereum-util&nbs…

    区块链 2022年8月4日
    4.5K
  • 阿里云SLB(负载均衡)访问远程端口

    最近公司在搞互联网医院三级等保的问题,然后广东卫生健康委办公室的接入通知里有一段话,说是用于互联网医院运行的服务器不少于2套(这里的单位是套),我们不知道这里的意思是指,服务器要有…

    2020年12月19日
    2.0K
  • 互联网医院_三级等保_存储型跨脚本执行漏洞

    最近公司在做三级等保备案,安全测试方反馈过来一份漏洞测试报告,其中有一条定义为高危的漏洞:存储型跨脚本执行。 造成这个漏洞的原因,是因为没有对客户端提交的内容进行安全过滤。系统用的…

    2021年2月5日
    40.5K
  • 以太坊节点面面观:全节点与轻节点(转)

    收看本系列文章的读者,应该都对于区块链的基本原理和架构有些概念,如果没有,推荐您先去Google搜寻区块链、比特币、以太坊这些关键字了解一下。我们将在这些基础概念之上,来谈区块链的…

    2020年11月30日
    6.8K
  • 广东省互联网医院接入——远程确认

    今天公司互联网医院接入终于走到了远程确认这一步了,因为一直是摸着石头过河,中间做了不少弯路,这里做个记录,希望也在摸索的同行如果看到能有一个参考。当然写这个的时候,还只是远程演示了…

    技术开发 2021年8月18日
    1.3K
  • 阿里云OSS图片上传与加水印签名访问

    最近公司的一个系统有一个需求,因为公司的产品有一些特殊性,经常有可能会被同行盗图,所以需要将所有的产品图片加水印展示。但是还有一个需求,内部人员可能需要查看原图,所以,这个就有点奇…

    2021年4月30日
    4.5K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(2条)

  • CZ
    CZ 2023年4月21日 下午12:25

    请问楼主这个服务器的参数是多少?我也搭了一个,但是用流式回复(每字每字的回复,和官网一样的效果)的时候很卡,通常是几句几句的回复,我怀疑是我的服务器性能不行。

    • Zeyu
      Zeyu 2023年5月2日 下午9:38

      @CZ我猜可能是你的服务器的网速有问题,我的是加一台香港的阿里云服务器中转,香港服务器用的是按量付费的3元每GB流量的,这样中转一下,可以秒响应,就是流式回复的话,文章中的配置要改一下。