Windows下编译Nginx超详细教程
Nginx在Linux下表现不用多说,在Windows下Nginx的表现还欠佳,但在Web应用性能整体要求不高的情况下,把Nginx作为一个反向和少量请求逻辑处理的应用还是很方便的。
网络上介绍的文章不少包括nginx的官网也有介绍,但是介绍都比较简单对于一些细节并没有提到,所以我把我摸索的一些经验写下来,希望可以帮助到正在找资料到人。
默认的nginx已经包含了很多通用的模块,详见:http://nginx.org/en/docs/
但是如果需要增加一些第三方的模块的话(比如淘宝的combo 模块:https://github.com/alibaba/nginx-http-concat)则需要下载nginx的源码并加入新的模块重新编译。下面我就来介绍下如何在windows下编译nginx并添加combo模块的。
需要准备的工具:
- visual studio 2013 2015 都可以
- 下载MSYS,地址:https://sourceforge.net/projects/mingw/files/Installer/ 下载mingw-get-setup.exe
- 安装perl,ActivePerl和Strawberry Perl都可以
- Mercurial安装包(一个源码管理器:水银)https://www.mercurial-scm.org/
-PCRE,zlib 和OpenSSL 这三个nginx需要的依赖模块 (笔者用的版本是:pcre-8.37,zlib-1.2.8,openssl-1.0.1s,需要注意的是openssl如果版本太高的话编译会报错,所以下载openssl的需要注意在官方地址的old目录中找到对应的版本)
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 lib ---openssl-1.0.1s.tar.gz ---pcre-8.37.tar.gz ---zlib-1.2.8.tar.gz ---nginx-http-concat
2.解压依赖组件包下载
在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.gz
zlib下载了后好像不是gzip格式的所以不能用-z参数,combo模块因为是源码直接拷贝到nginx/build/lib下即可
目前目录呈现这样子:
nginx ---build ------lib ---------openssl-1.0.1s ---------pcre-8.37 ---------zlib-1.2.8 ---------nginx-http-concat
3.配置nginx生成Makefile文件
如果打包的系统是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
但是这次我们不能用msys.bat来执行了,因为编译过程中代码会引用到很多系统自带库如果不在一个命名空间是无法引用的。
我们用visual studio 的命令行工具来执行(快捷方式在windows全部程序visual studio目录中)。
开始执行等待大概几分钟,如果没有意外就成功了,我在编译时最后提示找不到引用sed我看了一下是mingw中的引用文件,但是不用管他我们在build下的nginx.exe已经编译成功了。
OK,我们cd到build目录下执行nginx试试看吧!
好了,介绍window编译nginx的内容就介绍到这里,我自己尝试的时候遇到很多问题基本上就是一步一个坑摸索出来的,网上的资料也不是很全面,我想如果我们能写下来应该是可以帮助很多人的吧。
更多Nginx相关教程见以下内容:
Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里