Cygwin安装nginx就不多说了,需要PCRE和zlib,我这安装的1.2.6版本,因为是windows环境,需要修改主配置worker_connections到64以下,超过64会报错,可以用如下方式解决。
把ngx_select_module事件处理模块去掉,通过在执行configure时指定参数—without-select_module。
修改nginx的配置文件(c:\nginx\conf\nginx.conf),把这个文件第13行的1024改为64(worker_connections指令的值)。
在执行configure时指定额外的编译选项(--with-cc-opt=”-D FD_SETSIZE=2048”),这同样也可以解决上面的问题。
关键在于如何加载cgi,老外有个安装php-fpm的文章将的比较详细,也有翻译过来的,那个需要修改多个源码文件,文章具体地址我就懒的再找了,自己搜。这里不用php-fpm,php-cgi.exe就可以实现类似的功能,测试环境性能完全可以忽略了,php-cgi -b :9000 -c D:\Program Files\php-5.3.10-Win32-VC9-x86\php.ini 监听9000端口。
这里贴一个通用的PHP cgi调用,需要解析php的地方直接包含这个文件就可以了。
conf/php5
location ~* \.php($|/) {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $winPath$fastcgi_script_name;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
$winPath是上层配置中设置的,$document_root是cygwin格式的,应该就是root设置的那个路径。但是PHP在windows中(没有在cygwin中安装PHP)只认识windows格式的路径,所以需要单独设置这个路径。
conf/conf.d/test.conf
server {
listen 80;
server_name test;
root /cygdrive/e/document/www_root/test;
set $winPath e:/document/www_root/test;
location / {
}
include php5;
}
php-cgi转为daemon模式
web server环境没问题了,但是每次都要开着cgi的窗口,而且开机需要手动启动。
cygwin可以把程序安装成windows的系统服务,这样就可以后台运行并且自动启动了,cgi的参数睁大眼睛看清楚了。
$ cygrunsrv -I php-fcgi -p /cygdrive/d/Program\ Files/php-5.3.10-Win32-VC9-x86/php-cgi.exe -a "-b 127.0.0.1:9000 -c \"D:\Program Files\php-5.3.10-Win32-VC9-x86\php.ini\""
$ cygrunsrv -S php-fcgi
虽然在cygwin下,但是php-cgi.exe本质是windows程序所以-c不能使用cygwin格式的路径
也可以使用bat脚本实现开机自动启动,因为windows下可以穿透cygwin直接执行shell命令。