使用 Guzzlehttp 请求超时,报错CurlFactory.php 558 Maximum execution time of 60 seconds 问题解决

2023-09-05 16:21:09 浏览数 (3)

背景

windows环境,nginx服务器,laravel项目,使用guzzlehttp请求自己的接口,配置过了cacert.pem,超时,但是接口确实跑成功了。

原因

php只启动了一个进程,nginx又不维护进程池,一旦出现自己请求自己,就是单线程的递归服务,发请求占用了唯一的线程,一直到超时。

解决

  1. 多启动几个php-cgi的进程:既然是windows运行,我使用的是RunHiddenConsole运行bat脚本。脚本如下,运行了3个php-cgi进程,分别监听9000,9527,9528。
代码语言:javascript复制
@echo off
REM Windows 下无效
REM set PHP_FCGI_CHILDREN=5
 
REM 每个进程处理的最大请求数,或设置为 Windows 环境变量
set PHP_FCGI_MAX_REQUESTS=1000
 
echo Starting PHP FastCGI...
RunHiddenConsole D:wampphp-7.2.34-nts-Win32-VC15-x64php-cgi.exe -b 127.0.0.1:9000 -c D:wampphp-7.2.34-nts-Win32-VC15-x64php.ini
RunHiddenConsole D:wampphp-7.2.34-nts-Win32-VC15-x64php-cgi.exe -b 127.0.0.1:9527-c D:wampphp-7.2.34-nts-Win32-VC15-x64php.ini
RunHiddenConsole D:wampphp-7.2.34-nts-Win32-VC15-x64php-cgi.exe -b 127.0.0.1:9528 -c D:wampphp-7.2.34-nts-Win32-VC15-x64php.ini
 
echo Starting nginx...
RunHiddenConsole D:wampnginx-1.16.1nginx-1.16.1nginx.exe -p D:wampnginx-1.16.1nginx-1.16.1
  1. 更新 nginx.conf 配置文件,负载均衡我们的三个php-cgi进程。

首先添加负载均衡:

代码语言:javascript复制
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    client_max_body_size 1024M;

    ...

    # 这里添加配置 ↓↓↓
    upstream php_cgi_pass {
        server 127.0.0.1:9000 weight=1;
        server 127.0.0.1:9527 weight=1;
        server 127.0.0.1:9528 weight=1;
    }

    ...

之后在我们配置的server中替换:

代码语言:javascript复制
server {
        listen       81;
        server_name  local-ts.com;
        ......
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ .php$ {
            try_files $uri =404;

            # 这里更改 fastcgi_pass 替换即可 ↓↓↓
            fastcgi_pass   php_cgi_pass ;

            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
  • 重启脚本,ojbk

1 人点赞