前言
去年还是前年来的,我编译过Nginx。当时是照着网上文章一步一步做的,觉得并不复杂,因此也没有写记录。不过,最近工作需要再编译一个新版的。本想着一个小时搞定的事情,网上文章也找到了,也认认真真地看了,但是却足足折腾了一天。报的错误总体上就是在说我用64位的编译器在编译32位的内容什么的……,不懂!最后,发现需要修改工程里一份makefile文件才能通过64位的编译。
下载源码
下载地址:http://hg.nginx.org/nginx.org
上面是下载地址,没有Mercurial 工具的可以点击zip或者gz下载。放心还没完呢,开源界很少一个包搞定一切的。还有msys,Perl(Strawberry Perl,ActivePerl),PCRE,zlib和OpenSSL,名称上都要超链,点击下载吧。
msys
上面超链上的是官网(https://www.msys2.org/),国内下载可能有点慢,这里有清华的镜像地址:https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/ 和 中国科学技术大学的镜像地址:https://mirrors.ustc.edu.cn/msys2/distrib/ 我下载的是zip包,解压后没有配置,运行msys2.exe就工作了。我对msys2没有了解,不懂这东西怎么用。
Perl
这次我使用的ActivePerl。这个需要安装,我不喜欢,不过也有好处,安装时环境变量不用手动设置了。好像手动设置也不费事啊!Strawberry Perl是有zip包的,以后有机会再试吧。
OpenSSL
OpenSSL要使用1.0.xx版本的,1.1的版本编译不过的。
工程目录构建
Nginx
auto
conf
contrib
docs
Makefile
misc
objs
lib
PCRE
zlib
OpenSSL
src
64位编译修改(32位编译忽略)
打开.\auto\lib\openssl\makefile.msvc文件。
- 找到“VC-WIN32”替换为“VC-WIN64A”;
- “if exist ms\do_ms.bat”替换为“if exist ms\do_win64a.bat”;
- “ms\do_ms”替换为“ms\do_win64a”。
生成makefile文件
打开msys2.exe,切换到Nginx目录,然后运行下面命令。
auto/configure VC-WIN64A \
--with-cc=cl \
--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 \
--http-scgi-temp-path=temp/scgi_temp \
--http-uwsgi-temp-path=temp/uwsgi_temp \
--with-cc-opt=-DFD_SETSIZE=1024 \
--with-pcre=objs/lib/pcre-8.41 \
--with-zlib=objs/lib/zlib-1.2.11 \
--with-openssl=objs/lib/openssl-1.0.2o \
--with-openssl-opt=no-asm \
--with-select_module \
--with-http_ssl_module \
--with-http_gzip_static_module
编译
启动“x64 Native Tools Command Prompt for VS 20xx”(或者x86 Native Tools Command Prompt for VS 20xx),并且切换到Nginx目录。运行nmake,然后等待编译完成吧。