编译Windows版Nginx并添加模块

本文详细介绍了如何在Windows环境下编译Nginx并成功添加ngx_req_status模块,涉及工具选择、源码配置、模块打补丁及生成exe的全过程,适合Nginx初学者和模块扩展者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标

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

成功!!!

最后

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

Windows系统上编译Nginx添加RTMP模块的步骤如下: ### 准备工作 1. **安装编译工具**: - 下载安装[MSYS2](https://www.msys2.org/)。MSYS2提供了在Windows编译Nginx所需的工具链。 - 安装完成后,打开MSYS2终端,更新包数据库和基本包: ```sh pacman -Syu pacman -S base-devel mingw-w64-x86_64-toolchain ``` 2. **下载Nginx源码**: - 从[Nginx官网](http://nginx.org/en/download.html)下载最新的稳定本源码包。 - 解压下载的源码包到一个目录,例如`C:\nginx`。 3. **下载RTMP模块源码**: - 从[nginx-rtmp-module](https://github.com/arut/nginx-rtmp-module)仓库下载RTMP模块源码。 - 解压下载的源码包到一个目录,例如`C:\nginx-rtmp-module`。 ### 编译Nginx 1. **配置编译环境**: - 打开MSYS2终端,导航到Nginx源码目录: ```sh cd /c/nginx ``` 2. **配置编译选项**: - 使用`./configure`命令配置编译选项,指定RTMP模块的路径: ```sh ./configure --add-module=/c/nginx-rtmp-module --with-cc-opt="-Wno- 运行`make`命令进行编译: ```sh make ``` 4. **安装Nginx**: - 运行`make install`命令进行安装: ```sh make install ``` ### 配置RTMP模块 1. **编辑Nginx配置文件**: - 打开`C:\nginx\conf\nginx.conf`文件,添加RTMP配置。例如: ```nginx worker_processes 1; events { worker_connections 1024; } rtmp { server { listen 1935; chunk_size 4096; application live { live on; record off; } } } http { server { listen 8080; location / { root html; index index.html index.htm; } location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root html; } } } ``` 2. **启动Nginx**: - 在MSYS2终端中,导航到Nginx安装目录启动Nginx: ```sh cd /c/nginx ./nginx ``` ### 测试RTMP流 - 使用支持RTMP的播放器(如VLC)连接到`rtmp://localhost/live/stream`进行测试。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值