编译Windows版Nginx并添加模块

目标

为Windows版Nginx添加ngx_req_status模块

前言

Windows版nginx添加第三方模块不像linux那么方便,需要折腾一番。由于编译Windows版nginx的资料真的是少的可怜,六个月前收集各种资料,东拼西凑踩坑不少,再加上自己的聪明才智勉强添加成功,结果还是个阉割版的,部分功能不能使用,权衡之下,缺失的并不是必须功能,战略性地放弃了重新编译。
由于最近需要添加新模块所以再次尝试编译,并码此文章以记之。

工具准备

提供我顺利编译的版本,更换版本大概率踩新坑,主要了解各工具作用,当走不通的时候就能马上找出替代品。

■ 1.Nginx源码

名称:nginx-release-1.18.0
作用:纯净的源码,供编译使用。

下载地址:

https://codeload.github.com/nginx/nginx/zip/release-1.18.0

■ 2.Nginx官方编译好的版本

名称:nginx-1.18.0.tar
作用:官方编译好的文件,可以从中复制一些除exe外所需要的文件。

下载地址:

http://nginx.org/download/nginx-1.18.0.tar.gz

■ 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,安装并配置环境变量即可

下载地址:

https://www.activestate.com/products/perl/downloads/

■ 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文件夹

成功!!!

最后

大致就是这么个过程,软件不行换软件,有报错一个一个解决即可。

Guess you like

Origin blog.csdn.net/qq_24054301/article/details/112131057