nginx php访问阻塞,Windows下nginx+fastcgi+php的并发阻塞问题

同事接到一个需求,需要调用同一个项目的另一个接口,于是CURL调用接口。

代码撸完了,本地测试一下 浏览器一直转圈圈直到超时…… 百思不得其解

主要是windows+nginx开发环境遇到的问题,本人很少用windows开发所以也是第一次遇到,整理如下:

问题描述:

同一个项目中2个接口互相调用   api1  curl调用 api2 ,同时属于项目A

问题原因:

windows+nginx 其实无法真正的并行执行脚本,linux,mac下无问题,所以api1 curl调用api2接口的时候,api1先执行占用了cgi,没有完成,调用api2,api2这时候等待api执行完才能真正的执行,但是api1还在等待api2,所以产生了 ”死锁“

nginx以高并发闻名,怎么偏偏默认不支持并发?

Windows下PHP_FCGI_CHILDREN无效 (具体参见PHP BUG#49859) 一般情况下Windows下Nginx的配置都是fastcgi_pass 127.0.0.1:9000; 也就是说cgi根本不会自动产生新进程去处理并发请求,只能排队 那要怎么办?

既然不能自动生成,那就只好手动咯 动手解决 我准备额外启动3个php-cgi去处理并发请求 首先在nginx.conf中进行如下配置:

upstream phpfastcgi_proxy {

server 127.0.0.1:9000;

server 127.0.0.1:9001;

server 127.0.0.1:9002;

server 127.0.0.1:9003;

}

重启Nginx。 现在,Nginx会自动将请求转发给9000-9003

还需要启动对应数量的php-cgi去监听端口 快捷键Win+R打开运行,输入cmd进入命令行,录入以下代码:

E:/php/php-cgi.exe -b 127.0.0.1:9001 -c E:/php/php.ini

任务管理器中会发现多了一个php-cgi进程,netstat -a也能够看到9001端口被监听了 注意不要把命令行关掉了,而是要继续打开一个新的命令行 此时你已成功了一次,你还需要继续成功两次才能监听到9002和9003…… 额外的3个php-cgi进程启动成功后,你就拥有了一个并发数为4的本地环境

版权声明:本文由PHP面试资料网发布,如需转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值