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

接到一个需求,两个项目之间需要以接口形式通讯。我心想curl轻松解决,Easy!

啪嗒啪嗒啪嗒……代码撸完了,本地测试一下

浏览器一直转圈圈直到超时……

Why!?

没有任何错误提示信息,日志也没有任何新记录

POSTMAN调试了一下刚写出的接口,没问题啊?

再试一次结果依旧,重启环境后再试也依旧

经过一番测试,我怀疑是不是我本地环境无法并发?

我访问项目A是一个请求,项目A访问项目B的接口则是第二个请求。在无法并发只能排队请求的情况下,第一个请求依赖于第二个请求的结果;第二个请求却排在后面一直等待第一个请求执行完毕。这就导致互相依赖产生死循环,也就说得通了

怎么解决?

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

谷歌找了很多关于nginx并发的文章,挨个儿尝试设置,全都以失败告终

WTF!?这是闹哪样?该加该改的都弄了,理论上并发能力爆棚了啊

又是一番呕心沥血的谷歌,终于让我找到了答案——

Windows下PHP_FCGI_CHILDREN无效

(具体参见PHP BUG#49859

一般情况下Windows下Nginx的配置都是fastcgi_pass 127.0.0.1:9000;

也就是说cgi根本不会自动产生新进程去处理并发请求,只能排队

那要怎么办?既然不能自动生成,那就只好手动咯

动手解决

@echo off
REM Windows 下无效
REM set PHP_FCGI_CHILDREN=5

REM 每个进程处理的最大请求数,或设置为 Windows 环境变量
set PHP_FCGI_MAX_REQUESTS=1000
 
echo Starting PHP FastCGI...
RunHiddenConsole E:/wamp64/bin/php/php7.2.18/php-cgi.exe -b 127.0.0.1:9000 -c E:/wamp64/bin/apache/apache2.4.39/bin/php.ini
RunHiddenConsole E:/wamp64/bin/php/php7.2.18/php-cgi.exe -b 127.0.0.1:9001 -c E:/wamp64/bin/apache/apache2.4.39/bin/php.ini
 
echo Starting nginx...
RunHiddenConsole E:/wamp64/bin/nginx/nginx.exe -p E:/wamp64/bin/nginx

netstat -a也能够看到9001 9002端口被监听了

server {
	listen 80; 
	server_name  admin.com;
	root E:/GADMIN/admin_game/public;
 
	location / {
		index index.html index.htm index.php;
		try_files $uri $uri/ /index.php?$query_string;
	}
 
	location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
	} 
	
 	error_log  E:/wamp64/bin/nginx/logs/error.log;
	#access_log  E:/wamp64/bin/nginx/logs/access.log;
}

server {
	listen 80; 
	server_name  demo.apitest;
	root E:/GADMIN/apitest/public;
 
	location / {
		index index.html index.htm index.php;
		try_files $uri $uri/ /index.php?$query_string;
	}
 
	location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9001;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
	} 
	
 	error_log  E:/wamp64/bin/nginx/logs/error.log;
	#access_log  E:/wamp64/bin/nginx/logs/access.log;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值