编译Nginx for Windows并添加ngx_req_status第三方模块
目标
为 Nginx for Windows 添加 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功能
这三点基本是必备的。
下载链接:
①
②
③
■ 4.Perl脚本类库
名称:ActivePerl5.28
作用:解析openssl、安装并配置环境变量
下载链接:
■ 5.GNU环境
名称:MSYS-1.0.11.exe
作用:GNU,类UNIX家族成员,程序提供GNU环境,命令与Linux一致。 后续的打补丁和Makefile的生成都是在这个环境下完成的。
下载链接:
注:网上的解决方案都是类似GNU环境的文件。 很多安装很久之后就会发现卡在那里,直到这个版本。 事实上,在Mac和Linux下可以完全替代gcc操作linux 源码编译nginx,只要安装必要的插件即可。
■ 6.生成exe工具
名称:VS2015
功能:nmake运行生成exe。
■ 7. 第三方模块
准备好你需要的第三方模块,这里我计划是ngx_req_status。
开始运作
安装软件并配置必要的环境变量。
■ 1. 进入GNU窗口
以管理员身份运行 msys.bat
命令和我们平时在Linux和Mac下的命令是一样的
■ 2. 解压缩文件
从上面知道根目录,将需要的包全部解压到该目录下
在nginx-release-1.18.0目录下建一个文件夹存放模块包。 路径名是自定义的,但记住需要提前使用。 我把它放在bulidlib下并解压这些模块。
■ 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
如果正常的话,等待几分钟,会在homeAdministratornginx-release-1.18.0objs下生成一个Makefilelinux 源码编译nginx,并不断写入Makefile,然后等待十几分钟Makefile即可完全生成成功。
注意:必须以管理员身份运行。 我之前因为这个原因没有生成一些东西,编译失败。 然后我删除了Makefile中相应的函数就编译成功了。 因此,某些功能无法使用。
■ 5. 修改Makefile
找到-W4到-W3这两个参数或者删除-WX,含义是提高警告级别,这样编译就不会因为无关紧要的警告而停止,或者编译过程中的警告会被忽略,编译将会持续到最后。
■ 6.生成exe
在开始菜单中找到这个东西,右键以管理员身份运行
进入ng目录
cd C:msyshomeAdministratornginx-release-1.18.0
nmake操作生成exe
nmake -f objsMakefile
如果不报错,几分钟后会提示找不到引用的sed。 不执行sed命令也没关系,会在nginx-release-1.18.0objs目录下生成exe。
■ 7. 封装 Nginx
① 新建nginx文件夹
②复制源码中的conf和contrib
③复制官方编译版中的html
④复制objs目录下生成的nginx.exe
⑤ 创建新的日志和临时文件夹
成功! ! !
终于
大致流程是这样的。 软件无法更改,有错误可以一一解决。
发表评论