移植nginx到Windows上做开发环境的过程

移植nginx到Windows上做开发环境的过程

我的电脑的内存不多,跑apache久了感觉很吃力,Nginx吃内存就像记事本吃那么点,所以我自己编译一个来做开发用

安装前提:
安装好cygwin,并安装了gcc和g++  (安装见http://www.xueler.com/docs/tool/%E5%AE%89%E8%A3%85cygwin)
gzip 模块需要 zlib 库
rewrite 模块需要 pcre 库  
安装nginx前先将pcre和zlib装好
如果要使用ssl,还要openssl库
  • 1、从nginx.net 下载源码 nginx-0.7.24.tar.gz 存放到D:\linux\下
  • 2、使用cygwin把nginx安装到d:/server/nginx
安装命令

[Copy to clipboard] [ - ]
CODE:
cd /cygdrive/d/linux
tar zxvf nginx-0.7.24.tar.gz
cd nginx-0.7.24
./configure --prefix=/cygdrive/d/server/nginx --with-cc-opt="-D FD_SETSIZE=2048"
make && make install

如果不加–with-cc-opt=”-D FD_SETSIZE=2048”的话,你装好nginx后运行会出现

  2008/01/12 16:34:56 [emerg] 2496#0: the maximum number of files supported by select() is 64的错误提示,这表示FD_SETSIZE的值比nginx配置文件中worker_connections指令所指定的值,你可以把nginx.conf里的worker_connections选项改小一些,比如44,加了–with-cc-opt=”-DFD_SETSIZE=2048”后就不会碰到这问题

  • 3、从cygwin的bin目录中把 cygcrypt-0.dll,cygpcre-0.dll,cygwin1.dll,cygz.dll拷贝到D:\server\nginx\sbin中
用cygwin编译的nginx要独立于cygwin运行的时候需要这几个扩展

到这里就安装完成了,下面来配置。
php和MySQL什么装这里就不说了,我用的php解压在D:\server\php
如果没有装php和mysql,nginx这样的安装与配置照样能跑静态文件

  • 4、配置nginx+php+MySQL
我要打开一个cgi进程来监听处理php脚本(在windows下开发打开一个cgi进程已经能解决问题了)
我要启动nginx,MySQL,让nginx把对脚本的请求转发给php-cgi处理
我还要方便的关闭php-cgi、nginx和MySQL

打开在d:/server/nginx/conf/nginx.conf
这个配置文件里给我们创建了一个默认的虚拟主机localhost,文档根目录在d:/server/nginx/html/
找到 index  index.html index.htm;
改成 index  index.html index.htm index.php;
添加了nginx支持默认的php首页
把内容类似下面几行配置的内容前的注释去掉并改成

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  D:/server/nginx/html$fastcgi_script_name;
    include        fastcgi_params;
}
  • 5/制作nginx启动关闭脚本
在d:/server/nginx下创建start.bat和stop.bat
内容分别为:
d:/server/nginx/start.bat

[Copy to clipboard] [ - ]
CODE:
@echo off
echo php-cgi 正在启动 ...
start /b D:\server\php\php-cgi.exe -b 127.0.0.1:9000 -c d:\server\php\php.ini
echo php-cgi 启动完成 ...

echo nginx 正在启动 ...
d:/server/nginx/sbin/nginx.exe
echo nginx 启动完成 ...

net start mysql
echo 启动完成

d:/server/nginx/stop.bat

[Copy to clipboard] [ - ]
CODE:
@echo off
echo php-cgi 正在关闭 ...
tskill php-cgi
echo php-cgi 关闭完成

echo nginx 正在关闭 ...
tskill nginx
echo nginx 关闭完成

net stop mysql
echo 关闭MySQL完成

打开d:/server/nginx/start.bat和d:/server/nginx/stop.bat就可以分别启动和关闭nginx+php+mysql(cgi)了

尽管是编译安装nginx,但是nginx代码不是很多,编译安装完成所需时间比安装Dreamweaver CS4要快多了
因为使用的是cygwin环境来把unix软件编译到window下运行,所以这里有个问题是:我们只能在D:/server/nginx内创建虚拟主机目录,在D:/server/nginx之外将无法读取到里面的web文档文件
把 configure改成

[Copy to clipboard] [ - ]
CODE:
./configure --prefix=/cygdrive --http-fastcgi-temp-path=d/server/fastcgi_temp --http-proxy-temp-path=d/server/proxy_temp --http-client-body-temp-path=d/server/client_body_temp --http-log-path=d/server/logs/access.log --error-log-path=d/server/logs/error.log --pid-path=d/server/logs/nginx.pid --sbin-path=d/server/sbin/nginx --conf-path=d/server/conf/nginx.conf --with-cc-opt="-D FD_SETSIZE=2048"

可以让nginx读到nginx prefix以外的分区,但分区名中不能带: 并且只能用/,不能用\
比如把root设置到e:\web要写成 root     e/web

下载我编译和配置好的nginx0.7.24,编译后的文件很小,里面占空间的是安装流程文件
这篇帖子在这里更新
以cgi形式运行,不能用于大型应用吧?
我下载了你的安装文件,直接装在了d盘的d:\server\nginx  可是无法读取到其他盘里面的web文档文件
按照你说的 root  e/web设置了还是找不到啊
我的系统是win2003服务器
你看下nginx错误日志就明白了
在ngxin安装目录/logs下