php curl timeout Guzzlehttp请求超时

摘要:
发现使用Guzzlehttp请求自己时出错。我以前也遇到过类似的问题。当时,我在nginx上做了一次卷曲,然后一直超时。查找PHP所在的目录,在CMD下,输入D:cdD:wwwphp7.1php-cgi.exe-b127.0.0.1:9071 cD:wwwphp7.1php-cgi.exe-b1127.0.0.1:9072 cD:wwwwwphp7.1 php-cgi.exe exe-b1127.0.0.1:9073 cD:wwwphp7.1php.cgi.exe-b2127.0.0.1:9.074 cD:wwwwphp7.1php-cgi.exe.b1127.0.0.1:9075 cD:wwwphp71.php-cgi exe-b127..0.1:9076 cD:wwhp7.1php-cgi.exe-b127.0.0.1::9077 cD:wwwbhp7.1php-c D:wwwphp7.1php-cgi.exe-b127.0.0.1:9078-cD:wwwphp7.1php-cgi.exe-b127.0.0.1:9079-cD:wwwphp7.1 php-cgi。exe-B127.0.0.0.1:9070-cD:wwwphp7.1pause步骤2:修改nginx Conf配置。对于这些进程,负载平衡事件{worker_connections1024;}worker_processesauto;error_logD:/www/nginx/logs/error。日志pidD:/www/nginx/logs/nginx。pid;Http{includetime.types;default_typeapplication/octet流;sendfileon;tcp_nopushon;tcpnodelayon;#keepalive_timeout0;keepalive_timeout65;types_hash_max_size2048;#gzipon;includevhost/*.conf;###请注意,以下是上游进程php_farm的管理{服务器127.0.0.1:9070重量=1;服务器127.0.0.1:29071重量=1,服务器127.0.0.1:39072重量=1、服务器127.0.0.1:1:9073重量=1步骤3:在实际项目中,添加侦听器服务器{listen987;server_namewww.a.com;rootD:/project/laravel/public;indexindex.phpindex.htmlindex.htm;try_files$uri$uri/@rewrite;location@rewrite{rewrite^/(.*)$/index.php?

问题根源有2个:

1,windows上测试

2,使用了nginx

今天在搭建一个laravel项目的时候,遇到了一个问题,Apache可以正常使用,换成nginx就请求超时。排查到使用Guzzlehttp请求自己的时候出错了。
以前也遇到过类似的,当时也是在nginx上,做了一次curl,然后一直超时。

问题原因:

我猜测是php只启动了一个进程,nginx又不维护进程池,单个请求还好,一旦出现自己请求自己,就麻瓜了。因为自己请求自己,不就是递归吗,但是提供递归的服务是单线程,发请求占用了唯一的线程,一直hang到超时。

解决方法:

总共分三步

第一步
本地起10个php-cgi进程,分别监听不同的端口。找到自己php所在的目录,CMD下输入

D:
cd D:wwwphp7.1
php-cgi.exe -b 127.0.0.1:9071 -c D:wwwphp7.1
php-cgi.exe -b 127.0.0.1:9072 -c D:wwwphp7.1
php-cgi.exe -b 127.0.0.1:9073 -c D:wwwphp7.1
php-cgi.exe -b 127.0.0.1:9074 -c D:wwwphp7.1
php-cgi.exe -b 127.0.0.1:9075 -c D:wwwphp7.1
php-cgi.exe -b 127.0.0.1:9076 -c D:wwwphp7.1
php-cgi.exe -b 127.0.0.1:9077 -c D:wwwphp7.1
php-cgi.exe -b 127.0.0.1:9078 -c D:wwwphp7.1
php-cgi.exe -b 127.0.0.1:9079 -c D:wwwphp7.1
php-cgi.exe -b 127.0.0.1:9070 -c D:wwwphp7.1
pause

  

第二步

修改nginx.conf配置,对这些进程,做负载均衡处理

events {
    worker_connections  1024;
}
worker_processes auto;
error_log D:/www/nginx/logs/error.log;
pid D:/www/nginx/logs/nginx.pid;
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay         on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    types_hash_max_size 2048;
    #gzip  on;
    include vhost/*.conf;
####注意,下面这一块儿就是对上面进程的管理
    upstream php_farm {
        server 127.0.0.1:9070 weight=1; 
        server 127.0.0.1:9071 weight=1;
        server 127.0.0.1:9072 weight=1;
        server 127.0.0.1:9073 weight=1;
        server 127.0.0.1:9074 weight=1;
        server 127.0.0.1:9075 weight=1;
        server 127.0.0.1:9076 weight=1;
        server 127.0.0.1:9077 weight=1;
        server 127.0.0.1:9078 weight=1;
        server 127.0.0.1:9079 weight=1;
    }

}

  

第三步

实际项目中,增加监听(因为是laravel项目遇到的,所以部分conf是兼容laravel的路由逻辑,不是laravel项目的同学只需要注意fast_cgi的配置那里就行)

server {
    listen  987;
    server_name www.a.com;
    root D:/project/laravel/public;
    index index.php index.html index.htm;
    try_files $uri $uri/ @rewrite;
    location @rewrite {
        rewrite ^/(.*)$ /index.php?_url=/$1;
    }
    location ~ .php {
        add_header Access-Control-Allow-Origin http://localhost;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,lang,access-token';
        if ($request_method = 'OPTIONS') {
            return 204;
        }

        fastcgi_pass php_farm;
        fastcgi_index /index.php;
        fastcgi_split_path_info       ^(.+.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include                       fastcgi_params;
    }

    location ~ /.ht {
        deny all;
    }
}

  重启服务,搞定,enjoy it!

 
作者:怀老师
链接:https://www.jianshu.com/p/615395ebf078

免责声明:文章转载自《php curl timeout Guzzlehttp请求超时》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇javascript/css压缩工具---yuicompressor使用方法2.变量下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python源码为何都是pass

最近看Python代码  按照一个函数递进的看下去,最后发现,遇到很多源码什么逻辑都没写,仅仅以一个pass  结尾          但却能得到应该得到的结果,这点真的很奇怪,上网查找后 觉得下面的说法还挺符合我的想法,在这里粘贴出来,以后学习深入后继续增加或者修改相关表述: python是C语言实现的,尽管有很多标准库是由python代码实现,但是涉及...

Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel

Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel 1、MySQL安装【安装 MariaDB】MariaDB是MySQL的一个分支首先,更新升级系统$ sudo apt update$ sudo apt upgrade安装MariaDB:$ sudo apt install mariadb...

[转]Sublime text2安装php beautifier

sublime上格式化php的插件找到两个:php tidy和php beautifier,其中php tidy是按照wordpress风格组织代码,不喜欢括号里的那么多空格。。虽然在github上有人改造了一下变成ci风格,但装起来还是比较麻烦的 而php beautifier的安装也同样另人抓狂,但好歹也摸索出来了: 1. 终端下使用pear安装php...

matlab矢量场数值可视化(动态数值模拟)

https://blog.csdn.net/eric_e/article/details/81294092 D3.js实现数据可视化 三维可视化 风场可视化(数据插值):风场是动态变化的,实时刷新的,数据实时动态性较高 windy:https://download.csdn.net/download/weixin_38690337/10724155http...

python服务器环境搭建——安装相关软件

在上一篇我们在本地的虚拟服务器上安装好CentOS7后,我们的python web服务、自定义的python service或python脚本需要在服务器上运行,还需要在服务器安装各种相关的软件才行,一般来说,想要实现自动化部署需求,还需要安装nginx、svn、uwsgi、python3.0(系统自带python2.7.5)、supervisor、pos...

centos7下 PHP添加pdo_myql扩展

1、确认PHP.ini位置, 可以到PHPinfo()查看,没有的可以查找php.ini复制一份; 2.查找PHP(5.6.30)里面的扩展目录 find / -name pdo_mysql 我的在/usr/local/src/php-5.6.30/ext/pdo_mysql 3.打开/usr/local/src/php-5.6.30/ext/pdo_my...