我永远不会试图去战胜一个纯傻逼,因为他会用他丰富的经验来打败我...

3月 21

Windows 下nginx+php cUrl请求卡死的问题

缘由:         
    接手的新项目, 使用 Laravel 框架 ,有一个接口请求控制器使用的是 Guzzle HTTP客户端请求组件,开始用的时候,发现一直处于卡死, 直到 nginx 返回 504 Time Out ,并且请求的本地 api 服务器, 也没有请求日志,api 是可以确保在正常运行的。同时,线上的 api 地址就可以正常请求。所以,可以判断出代码是正常的,同时请求没有发出。 

    一开始以为是 这个组件的问题导致请求没有发出, 还去 gayhub 提 Issues , 结果被告知不是 Guzzle 的问题, 就被 close 掉了。 后来,隔了几天作者给我分析了一波,已下是原话。  第一次,没看明白这个功能也不是特别急,也就闲置了。    

The returned response indicates that your server responded, this the request itself is successful。 The response code indicates that something went wrong on server side (most probably your nginx server couldn’t connect to php-fpm)。 The fact that it works locally is irrelevant in this case as the problem is on the server side。

    现在,又要解决这个问题的时候, 想着把情况具体在说明一下,请教一下有么有办法解决,但是,这个时候我又看到他括号里的话 (most probably your nginx server couldn’t connect to php-fpm) 。所以,我就怀疑是不是 nginx的配置问题。

    

    由于,本人对 nginx 也不是特别熟悉。随即, 去 Google 了一下 nginx 和 php 的组合配置, 发现 Windows 环境下 nginx + php ,不支持并发。也就是,当本地配置了多个域名,并且同时指向你本地服务请求的时候,就不支持了。


    于是一个解决办法就是 修改 fastcgi_pass=127.0.0.1:9000 的配置, 这个配置 表示 nginx 会通过 fastcgi_pass 将请求的资源发给 127.0.0.1:9000 进行解析。 

    我这里有两个服务,所以分别配置成不同的端口号如,然后保存重启 nginx。 

fastcgi_pass = 127.0.0.1:9000
fastcgi_pass  = 127.0.0.1:9001

   在同时,在 cmd 下开启多个 php-cgi 指向 php.ini 进行监听。

  

你的php目录/php-cgi.exe -b 127.0.0.1:9000 -c 你的php目录/php.ini
你的php目录/php-cgi.exe -b 127.0.0.1:9001 -c 你的php目录/php.ini

    然后, 就能完美的解决问题了。


    这种问题也是因为,自身对 nginx 和 php 的配置不够熟悉。。


    在以后还是要多多学习!


   

发表评论

电子邮件地址不会被公开。 必填项已用*标注