这其实也不只是宝塔的问题,在windows下nginx+fastcgi模式的php,都会发生这个问题。本文以在宝塔windows5.4版中修改为例说明此问题解决方法。
对于需要付费购买宝塔的朋友,可参加近期优惠活动:点此可以领取宝塔¥3188元礼包,券可直接用于抵扣。
一、发生问题的环境
操作系统:windows
Web软件:nginx
脚本解析:php(以fastcgi模式运行,windows大多也只能以这个模式)
二、问题表现
表现1:当浏览器打开1个php页面尚未打开时,再打开同项目网站第2页面会阻塞,浏览器一直在空白,转圈圈状态,直到第1个页完全打开后,第2个页面才会开始被执行并打开。
表现2:curl去get本地文件时,表示为阻塞,直到超时。这个过程中,两个网站其它页全部被阻塞,表示为浏览器打开时为空白。
三、问题原因:
Windows下PHP_FCGI_CHILDREN无效。
一般情况下Windows下Nginx对php的请求都是通过 fastcgi_pass 127.0.0.1:9000 处理,在宝塔中配置为 fastcgi_pass 127.0.0.1:4570(其中70是php版,本文以此版本为例,如php5.6则是监听端口4556,7.1是 4571,实际操作时请做相应修改),当新接受到多个cgi请求时,cgi不会自动产生新进程去处理并发请求,只能排队(而在Ubuntu等linux类操作系统中,则会自动利用子进程去处理并发的其它请求)。而curl本地