linux 源码编译nginx-编译Nginx for Windows并添加ngx_req_status第三方模块

编译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

linux 源码编译nginx_源码编译安装_源码编译器

功能:官方编译的文件,可以从中复制除exe之外的一些需要的文件。

下载链接:

■ 3.Nginx必须依赖模块

名称:①Pcre-8.42 | ②Zlib-1.2.11 | ③OpenSSL-1.0.1u

功能:①正则表达式分析②gzip压缩解压功能③安全套接字ssl功能

这三点基本是必备的。

下载链接:

■ 4.Perl脚本类库

名称:ActivePerl5.28

作用:解析openssl、安装并配置环境变量

linux 源码编译nginx_源码编译安装_源码编译器

下载链接:

■ 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窗口下执行相应的命令。

源码编译安装_源码编译器_linux 源码编译nginx

■ 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目录

源码编译安装_linux 源码编译nginx_源码编译器

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

⑤ 创建新的日志和临时文件夹

成功! ! !

终于

大致流程是这样的。 软件无法更改,有错误可以一一解决。