Nginx在Linux下表现不用多说,在Windows下Nginx的表现还欠佳,但在Web应用性能整体要求不高的情况下,把Nginx作为一个反向和少量请求逻辑处理的应用还是很方便的。
网络上介绍的文章不少包括nginx的官网也有介绍,但是介绍都比较简单对于一些细节并没有提到,所以我把我摸索的一些经验写下来,希望可以帮助到正在找资料到人。
默认的nginx已经包含了很多通用的模块,详见:
但是如果需要增加一些第三方的模块的话(比如淘宝的combo 模块:https://github.com/alibaba/nginx-http-concat)则需要下载nginx的源码并加入新的模块重新编译。下面我就来介绍下如何在windows下编译nginx并添加combo模块的。
需要准备的工具:
0.安装MSYS下载mingw-get-setup.exe直接执行直接下一步即可,安装完成之后找到文件bin/mingw-get.exe打开,用这个来安装msys点击左侧的Basic Setup右侧选择mingw32-base和msys.base只有点击菜单isntallation-》Apply Changes 开始下载,完成之后点击左侧All Packages-》MSYS-》MSY Base System检查右侧菜单的选中组件中是否有msys-make、msys-tar因为这两个组件会在接下来用到。
1.下载nginx源码和依赖模块首先安装Mercurial并在环境变量中添加C:\Program Files\Mercurial\目录,因为我们需要在命令行中使用hg命令来获取nginx的源码。
hg clone http://hg.nginx.org/nginx下载到本地,需要注意的是不知道是不是我的网络问题下载过程很不稳定,如果不成功多试几次!
下载nginx的依赖模块就放到nginx源码的同级目录中,包括combo的源码:
在nginx目录中新建build文件夹做为我们编译目录,并在build中新增lib存放依赖包解压目录。
nginx ---build ------lib打开MSYS安装目录下的msys.bat命令行工具,cd到nginx/build/lib目录下执行:
tar -xzf ../../lib/openssl-1.0.1s.tar.gz tar -xzf ../../lib/pcre-8.37.tar.gz tar -xf ../../lib/zlib-1.2.8.tar.gzzlib下载了后好像不是gzip格式的所以不能用-z参数,combo模块因为是源码直接拷贝到nginx/build/lib下即可
目前目录呈现这样子:
如果打包的系统是x64的话需要在生成Makefile之前把openssl模块的配置修改为x64的,到nginx/build/lib/openssl-1.0.1s目录下,找到INSTALL.W64文件,用编辑器打开,找到类似如下文字:
To build for Win64/x64: > perl Configure VC-WIN64A > ms\do_win64a > nmake -f ms\ntdll.mak > cd out32dll > ..\ms\test在cmd命令行中cd到目录下分别执行前两句:
> perl Configure VC-WIN64A > ms\do_win64a执行成功即可。
接下来。。。
启动msys.bat并cd到nginx源码目录下执行:
auto/configure --with-cc=cl --builddir=build --prefix= \ --conf-path=conf/nginx.conf --pid-path=logs/nginx.pid \ --http-log-path=logs/access.log --error-log-path=logs/error.log \ --sbin-path=nginx.exe --http-client-body-temp-path=temp/client_body_temp \ --http-proxy-temp-path=temp/proxy_temp \ --http-fastcgi-temp-path=temp/fastcgi_temp \ --with-cc-opt=-DFD_SETSIZE=1024 --with-pcre=build/lib/pcre-8.37 \ --with-zlib=build/lib/zlib-1.2.8 --with-openssl=build/lib/openssl-1.0.1s \ --with-select_module --with-http_ssl_module --with-ipv6 \ --with-http_sub_module \ --add-module=build/lib/nginx-http-concat执行完毕之后在build目录下会生成一堆文件,其中Makefile就是我们生成的编译批处理文件了。
接下来继续执行命令:
nmake -f build/Makefile