Windows环境下PHP的CURL超时问题

开发环境:Laragon(Windows+ngixn+php+mysql)
开发工具: PhpStorm

 项目中遇到这样一个问题,当项目A需要通过curl请项目B的接口时候,总是会导致504超时问题。出现这个问题的原因是php-cgi进程只有一个,项目A启动一个php-cgi处理任务时,需要请求项目B先处理任务,但是php-cgi被A占用,此时B在等待A结束,A在等待B处理完成才能继续执行,进入相互等待状态,也就是死锁,最终导致php-cgi进程超时,报504错误。

知道原因了,就好办了, Laragon集成开发环境有一个功能,可以预先设置多个php-cgi,首先进入Laragon的安装目录,在安装目录下有一个usr的目录,我们进如该目录,找到laragon.ini这个文件,打开,如下图:

Windows环境下PHP的CURL超时问题_第1张图片

在[nginx]那一项下,有一个Upstream,你可以给他设置一个值,这个值代表了Laragon会启动几个php-cgi,这里我设置的是5,那么我当启动Laragon后,会有5个php-cgi启动,这个时候你不需要重启Laragon,因为还没有完。

Windows环境下PHP的CURL超时问题_第2张图片

配置完Upstream的数量后,我们回到安装目录,进入 etc\nginx 目录,在这个目录下,打开php_upstream.conf文件,

Windows环境下PHP的CURL超时问题_第3张图片

你会看到Laragon已经帮我们配置好了我们指定数量的端口号,端口号从9001~9005,刚好5个,你可以试试设置Upstream=3,看看会有什么效果。

接下来,我们该修改nginx的虚拟主机的配置了,配置文件在安装目录下的etc\nginx\sites-enabled目录下,我们打开A项目对应的配置文件,你会看到这样的配置,这是Laragon自动给我们配置好的。

Windows环境下PHP的CURL超时问题_第4张图片

我们需要修改,修改如下:

Windows环境下PHP的CURL超时问题_第5张图片

同样的,我们B项目的配置文件修改如下:

Windows环境下PHP的CURL超时问题_第6张图片

这样做的目的是,是为了A使用9001端口号的php-cgi,项目B使用9002端口号的php-cgi,就避免了死锁。

最后重启Laragon,curl导致的504超时问题解决。

 

 

 

 

 

 

你可能感兴趣的:(php)