重装了一台阿里云,系统win2008,为了方便,直接使用云镜像里的安装包,简介写得很牛B,如何强大如何便于管理,结果装完发现php-cgi.exe会在响应一定请求数自动挂起,这个几万年前就存在的bug居然没有解决就敢发包分享,还收费,真是什么鸟人都有!
经过一番摸索,完美解决windows下php-cgi.exe的挂起问题,经过JMeter的压力测试,不会出现退出、挂起现象。
所以本文要解决的问题是:
1、php-cgi.exe自动退出
2、如何将xxfpm设置成系统服务,随系统重启
3、如何IIS+Nginx共存的时候,80端口共享
第一步:windows下安装Nginx,Mysql,PHP
本步骤过于简单,就跳过了,如果连这个也不会,建议到全中国最牛X的技术资料平台【百度】搜索“nginx+php”
mysql的安装就是next、next、next的问题,也不说了。
后面的步骤才是本文的重点!
第二步:让php-cgi.exe受xxfpm守护,而xxfpm随系统启用,达到后台运行的效果
网上很多文章介绍用什么应用隐藏工具,还有写什么bat手工运行的,我就不吐槽了。
(1)你需要下载xxfpm.exe,把它放在PHP目录下;
(2)再下载【命令调用工具】winserv.exe,也放在PHP目录下,我们将它注册成系统服务,通过它去执行xxfpm.exe;
(3)编写如下的批处理文件install.bat,目的是将winserv.exe注册成系统服务:
@echo off
if not ""%1"" == ""INSTALL"" goto remove
"C:/nginx/php\winserv.exe" install "nginxPHP-CGI" -start auto "C:/nginx/php\php-cgi.exe" -b 127.0.0.1:9000 -c "C:/nginx/php\php.ini"
net start nginxPHP-CGI > NUL
goto end
:remove
net stop nginxPHP-CGI > NUL
"C:/nginx/php\winserv.exe" uninstall "nginxPHP-CGI"
:end
exit
可以直接copy上面代码,改名install.bat,执行即可。当然上面的目录路径要修改成你的。这步操作完,php-cgi.exe会随winserv.exe的启动而启动,但还没完,因为这时候的php-cgi.exe很脆弱,500个请求就会down掉。
(4)在【运行】里输入regedit.exe,找到[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\nginxPHP-CGI],即刚才注册的服务键值,如下图:
把CommandLine的值修改为:
C:\nginx\php\xxfpm.exe "C:/nginx/php/php-cgi.exe -c C:/nginx/php/php.ini" -n 5 -i 127.0.0.1 -p 9000
注意修改成自己的目录。上面的命令就是通过xxfpm.exe去管理php-cgi.exe进程,-n 5是打开5个进程,可以自行修改。
(5)大功告成!无弹出窗,无界面。工具包在文章后面提供下载。
第三步:把IIS站点中解析的域名,通过Nginx反向代理给IIS,实现80端口共享;
比如IIS中,有两个站点,域名端口分别设置如下:
www.123.com : 8002,www.abc.com:8003
(1)打开Nginx的配置文件nginx.conf,加入如下代码:
server {
listen 80;
server_name www.123.com;
#代理规则配置
location / {
root "/";
proxy_pass http://www.123.com:8002;
}
}
server {
listen 80;
server_name www.abc.com;
#代理规则配置
location / {
root "/";
proxy_pass http://www.abc.com:8003;
}
}
搞定,然后你访问www.123.com 的时候,并不会显示端口号,IIS会负责解决asp/.net的运行,Nginx负责PHP的工作,各斯其职。
这样就完美解决windows下php-cgi经常自动死掉、xxfpm运行不方便、IIS+Nginx的端口兼容问题了。
附上所有工具包、bat文件:百度网盘
运行效果图: