编译Windows版Nginx并添加ngx_req_status第三方模块
- 目标
- 前言
- 工具准备
- ■ 1.Nginx源码
- ■ 2.Nginx官方编译好的版本
- ■ 3.Nginx必备依赖模块
- ■ 4.perl脚本解释器
- ■ 5.GNU环境
- ■ 6.生成exe工具
- ■ 7.第三方模块
- 开始操作
- ■ 1.进入GNU窗口
- ■ 2.解压文件
- ■ 3.第三方模块打补丁
- ■ 4.生成Makefile
- ■ 5.修改Makefile
- ■ 6.生成exe
- ■ 7.包装好Nginx
- 最后
目标
为Windows版Nginx添加ngx_req_status模块
前言
Windows版nginx添加第三方模块不像linux那么方便,需要折腾一番。由于编译Windows版nginx的资料真的是少的可怜,六个月前收集各种资料,东拼西凑踩坑不少,再加上自己的聪明才智勉强添加成功,结果还是个阉割版的,部分功能不能使用,权衡之下,缺失的并不是必须功能,战略性地放弃了重新编译。
由于最近需要添加新模块所以再次尝试编译,并码此文章以记之。
工具准备
提供我顺利编译的版本,更换版本大概率踩新坑,主要了解各工具作用,当走不通的时候就能马上找出替代品。
■ 1.Nginx源码
名称:nginx-release-1.18.0 作用:纯净的源码,供编译使用。
下载地址:
■ 2.Nginx官方编译好的版本
名称:nginx-1.18.0.tar 作用:官方编译好的文件,可以从中复制一些除exe外所需要的文件。
下载地址:
■ 3.Nginx必备依赖模块
名称:①Pcre-8.42 | ②Zlib-1.2.11 | ③OpenSSL-1.0.1u 作用:①正则表达式解析 ②gzip压缩解压缩功能 ③安全套接字ssl功能
这三个必备,基本必用。
下载地址:
①https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz ②http://www.zlib.net/zlib-1.2.11.tar.gz ③https://www.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz
■ 4.perl脚本解释器
名称:ActivePerl5.28 作用:解析openssl,安装并配置环境变量即可
下载地址:
■ 5.GNU环境
名称:MSYS-1.0.11.exe 作用:GNU,类UNIX家族的一员,程序提供GNU环境,命令和Linux一致。后续打补丁,生成Makefile都在该环境下完成。
下载地址:
https://nchc.dl.sourceforge.net/project/mingw/MSYS/Base/msys-core/msys-1.0.11/MSYS-1.0.11.exe
注:网上的方案全是类似GNU环境的文件,很多安装半天还会发现下不完卡在那,直到这个版本。其实gcc操作在Mac、Linux下完全可以替代的,只要安装好必要的插件即可。
■ 6.生成exe工具
名称:VS2015
作用:nmake操作,生成exe。
■ 7.第三方模块
准备好你所需要的第三方模块,在此我准备的是ngx_req_status。
开始操作
安装好软件并配置好必要的环境变量。
■ 1.进入GNU窗口
以管理员身份运行msys.bat
命令和我们平时在Linux和Mac下一样
■ 2.解压文件
由上得知根目录,将所需要的包都解压在这个目录下
在nginx-release-1.18.0目录下建立文件夹存放模块包,路径命名自定义不过得记住后面需要用到,我放在了bulid\lib\下,并且解压好这几个模块。
■ 3.第三方模块打补丁
根据文档要求打上对应版本的补丁,它会往源码里加一些东西。
在GNU窗口下执行对应命令。
■ 4.生成Makefile
路径如有不同,修改相应路径,执行以下脚本——
auto/configure \
--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=bulid/lib/pcre-8.42 \
--with-zlib=bulid/lib/zlib-1.2.11 \
--with-openssl=bulid/lib/openssl-1.0.1u \
--with-openssl-opt=no-asm \
--with-select_module \
--with-http_ssl_module \
--with-http_sub_module \
--with-openssl-opt=no-asm \
--add-module=bulid/lib/ngx_req_status-master
如果正常,等待几分钟,就会生成一个Makefile在home\Administrator\nginx-release-1.18.0\objs下,并且不断的写入Makefile,再等待十几分钟Makefile完全生成成功即可。
注:一定要管理员身份运行,之前我就是因为这个原因少生成了一些东西,编译不通过,然后在Makefile里删除了对应的函数才编译成功,结果可想而知一些功能不能使用了。
■ 5.修改Makefile
找到这两个参数-W4改为-W3 又或删除 -WX,意义在于降低警告级别,不会因为无关紧要的警告而停止编译,又或者忽略编译过程中的警告,一直编译到底。
■ 6.生成exe
开始菜单中找到这个玩意,右键管理员身份运行
进入ng目录
cd C:\msys\home\Administrator\nginx-release-1.18.0
nmake操作生成exe
nmake -f objs\Makefile
如果没有报错,过几分钟,提示找不到引用sed,sed命令没执行没关系,exe就生成在了nginx-release-1.18.0\objs\目录下了。
■ 7.包装好Nginx
①新建nginx文件夹
②拷贝源码中的conf、contrib
③拷贝官方编译好的版本中的html
④拷贝objs目录中生成的nginx.exe
⑤新建logs和temp文件夹
成功!!!
最后
大致就是这么个过程,软件不行换软件,有报错一个一个解决即可。