前些日子试着在CYGWIN下编译了一个nginx,然后把需要的DLL和EXE复制到windows环境下单跑,也是可以的,简单试了一下反向代理的功能,也没做啥性能的测试。
后来又网友说关于PHP支持的问题,当时自己想到的是nginx通过fastcgi来解释PHP的,所以应该是与平台没太大关系的。而昨天尝试了一下,却果然没有成功,看上去是fastcgi服务器没有能够正确获得PHP文件,而nginx的日志上却是404。胡乱折腾的最好结果也就是第一次能浏览到PHP运行结果,再刷一下页面就又是No Input File Specified 。
经过很多次的编译尝试、修改配置文件、重启服务,终于搞定了PHP的问题,虽然是最简单的应用,却也许对大家有些帮助。说说过程。
在cygwin下面编译时的配置参数如下:
./configure
--with-http_ssl_module --with-http_realip_module --with-http_addition_module
--with-http_sub_module --with-http_dav_module --with-http_flv_module
--with-http_stub_status_module --prefix=/cygdrive/c/nginx
--sbin-path=/cygdrive/c/nginx --with-cc-opt="-D FD_SETSIZE=4096"
然后复制需要的DLL文件和编译的到的nginx.exe到c:\nginx目录下,建好conf、logs等相关目录,用到的DLL我截了个图:
然后搞个windows下的PHP,我装在了c:\php。
下面是配置文件的一些片段,和PHP的fastcgi配置有关的,红色部分和默认的不太一样,经过多次尝试,貌似只能这样指定一下documentroot,我的实际的网站根目录是在c:\nginx\html
fastcgi_params文件内容:
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param
SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING
$query_string;
fastcgi_param REQUEST_METHOD
$request_method;
fastcgi_param CONTENT_TYPE
$content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME
/nginx/html$fastcgi_script_name;
fastcgi_param SCRIPT_NAME
$fastcgi_script_name;
fastcgi_param REQUEST_URI
$request_uri;
fastcgi_param DOCUMENT_URI
$document_uri;
fastcgi_param DOCUMENT_ROOT
$document_root;
fastcgi_param SERVER_PROTOCOL
$server_protocol;
fastcgi_param REMOTE_ADDR
$remote_addr;
fastcgi_param REMOTE_PORT
$remote_port;
fastcgi_param SERVER_ADDR
$server_addr;
fastcgi_param SERVER_PORT
$server_port;
fastcgi_param SERVER_NAME $server_name;
PHP的fastcgi server通过这个命令起来:
c:\PHP\php-cgi.exe -b
127.0.0.1:9001 -c c:\php\php.ini
网上说关于lighttpd的fastcgi的文章里有关于如何隐藏掉上面这个命令出来的dos窗口,找个RunHiddenConsole.exe就可以
nginx的配置文件里
location ~
.*\.php$
{
root html;
include fastcgi_params;
fastcgi_pass
127.0.0.1:9001;
fastcgi_index index.php;
}
其他的貌似也没什么太复杂的地方了,昨天一开始尝试,可能和编译的配置参数有关系,上次configure时,prefix是指定为"."的。
本来我对PHP也不是熟悉,这个试验的结果也就是phpinfo()能够返回正常的结果,至于PHP里面的一些东西以及和数据库相关的东西,没有研究,精力有限,估计也不会去折腾了。