使用nginx,碰到php 需要转发给 cgi程序。
关于FastCGI:
全称 FastCGI Process Manager,是一种进程管理器,管理 cgi,市面上有很多进程管理器,PHP-FPM就是其中一种。
PHP-FPM作为进程管理器,会监听端口,默认为9000,并且监听本机,只接收127.0.0.1
linux下通过 netstat -nlpt|grep php-fpm 查看,PHP-CGI 是PHP自带的FastCGI管理器,缺点:
- php-cgi更改 php.ini 配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。
- 直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程)
本篇只讲windows(64位)下,采用nginx,使用php-cgi解析,默认情况下,当 php-cgi 处理php 达到500次,就自动关闭,即不能解析PHP(这你妹也太坑了吧!都PHP7了,这个问题 还存在)
解决方法:采用xxfpm,管理FastCGI进程.下载地址:https://github.com/78/xxfpm,在此非常感谢这位大哥。
安装xxfpm管理器
下载地址:
或
用到的文件: pthreadGC2.dll , xxfpm.exe
1. xxfpm.exe,解压后可以和nginx放同一目录也可放其他目录 (文件在bin文件夹下)。
2. 找到 pthreadGC2.dll , 将这个文件复制到 C:/Windows/SysWOW64 目录(如果系统是32位的,将dll文件复制到 C:\Windows\System32 下);
3. 新建一个文件 registe.bat,和pthreadgc2.dll同目录,内容如下,完成后双击registe.bat文件运行下:
@echo 开始注册
copy pthreadgc2.dll %windir%\SysWOW64\
regsvr32 %windir%\SysWOW64\pthreadgc2.dll /s
@echo pthreadgc2.dll 注册成功
@pause
4.将下载的xxfpm.exe copy 到nginx目录下(这里以我的目录 d:/nginx 为例)。
5.下载 RunHiddenConsole.exe(用于后台运行nginx)并解压:
start_nginx.bat #文件说明:这里我们仍然以解压到nginx目录为例,-n后面为启动个数,php位置请根据情况调整
@echo offset PHP_FCGI_MAX_REQUESTS=1000echo Starting PHP FastCGI...RunHiddenConsole d:/nginx/xxfpm.exe "d:/php/php-cgi.exe -c d:/php/php.ini" -n 5 -i 127.0.0.1 -p 9000echo Starting nginx...RunHiddenConsole d:/nginx/nginx.exe -p d:/nginxexit
stop_nginx.bat
@echo offecho Stopping nginx...taskkill /F /IM nginx.exe > nulecho Stopping PHP FastCGI...taskkill /F /IM xxfpm.exe > nulexit
6.现在运行 start_nginx.bat,等于同时开启5个php-cgi进程,因为我们传了参数 -n 为5,如果手动断掉一个,会发现又多出来一个,还是5个,
因为xxfpm会管理php-cgi,将其维持在5个php-cgi进程,防止cgi进程崩溃关闭。