Windows10下编译Nginx源码

背景

因为之前使用的带有http-flv模块的Nginx版本是直接从网上下载别人编译好的,原因是一直编译不过去Windows版本的Nginx,所以使用人家编译好的,就懒得再研究,但是Nginx近期一直被项目扫描出有漏洞,不得不编译出一个新的出来,编译期间太多曲折,所以记录下,方便以后回顾。

环境准备

1、准备一台Windows10的电脑;
2、安装VS2017,记得选择安装社区版的vs_Community_2017.exe
3、安装ActivePerl,我这边使用的版本是ActivePerl-5.28.msi,这是为了编译OpenSSL准备的;
4、安装msys2,我这边使用的版本是msys2-x86_64-20211130.exe;
5、安装sed-4.2.1-setup.exe。
安装的过程就不多做讲解了,需要注意的是,安装完后,要确保安装目录都有加入到系统环境变量里面。

源码准备

1、下载nginx-1.20.2-code.tar.gz

注意:Nginx源码一定要到这个地址http://hg.nginx.org/nginx,不能到这个地址下载http://nginx.org/en/download.html,我就是因为从这里下载的源码没有WIN32的部分了,所以一直编译出问题。
我下载的是下图这个版本的,当前最新最稳定的版本,你们也可以根据需要下载其他版本。我们点击nginx-1.20.2-RELEASE进去下载。
在这里插入图片描述
在这里插入图片描述

2、下载nginx-http-flv-module-master.zip

我这边使用的是未央千城所维护的http-flv模块的源码,可以进入他的GitHub进行下载,直接下载zip即可。
在这里插入图片描述

3、下载openssl-1.1.1l.tar.gz

我选择的OpenSSL版本是openssl-1.1.1l,原因是,我在下载Nginx源码的时候,看到nginx-1.20.2之前基于Windows编译的有更新了OpenSSL版本,我看到里面的版本是openssl-1.1.1l,所以选择此版本(底下的pcre和zlib也同理)。但是网上也有人说openssl-1.1.1的版本会导致nginx编译不过,后面会有说如何解决。
在这里插入图片描述
在这里插入图片描述

4、下载pcre-8.44.zip

pcre我用的版本是pcre-8.44

5、下载zlib-1.2.11.tar.gz

zlib我用的版本是zlib-1.2.11

编译准备

解压nginx-1.20.2-code.tar.gz,并把文件夹重命名成nginx-1.20.2-code(强迫症行为)。
进入nginx-1.20.2-code目录,创建objs/lib,并把依赖的四个源码压缩包拷进去分别进行解压,如下图。
在这里插入图片描述

开始编译

1、Makefile生成

打开MSYS,进入到nginx-1.20.2源码目录。
在这里插入图片描述
在这里插入图片描述
执行configure进行Makefile文件的生成,可以使用如下命令:

auto/configure --with-cc=cl --with-debug --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=objs/lib/pcre-8.44 --with-zlib=objs/lib/zlib-1.2.11 --with-openssl=objs/lib/openssl-1.1.1l --with-openssl-opt=no-asm --with-http_ssl_module --with-http_sub_module --with-http_auth_request_module --add-module=objs/lib/nginx-http-flv-module-master

注意:我这边是有加入–with-http_auth_request_module,可以根据需要是否添加此模块;还有我这边的–prefix= 是没有带路径的,因为带了路径后面就得把conf、logs、temp等文件夹拷贝进去这个路径,不然会运行出错。

开始生成Makefile,需要等到一段时间,直到出现如下画面,证明已经成功,可以在源码目录和objs目录下看到有Makefile生成。
在这里插入图片描述

2、编译nginx源码

打开VS2017的命令行工具,进入到nginx源码目录,执行nmake:
在这里插入图片描述
在这里插入图片描述
这时候你就会遇到出错了。
1、如果遇到这样的报错:Can’t locate Win32/Console.pm in @INC,找到C:\Perl64\site\lib\ActivePerl目录下的Config.pm,打开文件,注释掉如下的代码后保存文件。
在这里插入图片描述
2、解决openssl部分编译不过的坑
打开D:\nginx\nginx-1.20.2-code\auto\lib\openssl目录下的makefile.msvc文件,修改如下部分:
在这里插入图片描述
3、修改Makefile
修改D:\nginx\nginx-1.20.2-code\objs\Makefile中的CFLAGS字段,去掉-W4 -WX的编译选项,添加-W3的编译选项

重新执行nmake编译
执行完上面的全部操作后,再回到VS2017命令行执行nmake就会开始编译,大概需要等十几分钟才会编译完成。编译成功的调试如下:
在这里插入图片描述
此时再回到objs目录下,会看到nginx.exe就是我们编译出来的。
在这里插入图片描述

编译完成后续

编译完成后,我们再去nginx官网下载一个Windows版本的nginx-1.20.2的程序。
在这里插入图片描述
解压下载下来的nginx-1.20.2.zip,把我们编译的nginx.exe替换进去,然后找到D:\nginx\nginx-1.20.2-code\objs\lib\nginx-http-flv-module-master\test下的nginx.conf替换到D:\nginx\nginx-1.20.2\conf目录下。打开cmd进行测试,执行nginx.exe -t 命令,出现如下调试证明编译出来的Windows版本的nginx可用。
在这里插入图片描述

部署

至此,我们就可以和FFmpeg进行一些rtmp推流和http-flv拉流的部署操作,我的其他博客有讲解这方面的内容,不再详解。

工具和源码下载

全套编译工具和源码:download
直接编译好可用的nginx:nginx-1.20.2

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Windows操作系统上编译Nginx,可以使用一系列工具来完成这个过程。下面是一些常见的工具,用于准备、编译和构建Nginx。 1. 编译工具链:首先,您需要安装Windows版的编译工具链,如Cygwin或MinGW。它们提供了在Windows环境中编译和构建软件所需的基本工具和库。 2. Nginx源代码:从Nginx官方网站上下载最新的稳定版源代码。将源代码解压到本地目录。 3. OpenSSL:Nginx需要与SSL/TLS功能一起编译。下载和安装Windows版的OpenSSL库,并确保将其正确安装到系统路径中。 4. PCRE:Nginx还需要PCRE(Perl Compatible Regular Expressions)库来支持正则表达式的处理。下载和安装PCRE库,并将其路径设置为系统环境变量。 5. 编译配置:打开命令提示符或Cygwin/MinGW终端,导航到Nginx源代码所在的目录。在此之前,您需要根据您的需求编辑或创建一个适当的编译配置文件。 6. 编译命令:在命令提示符或终端中,使用以下命令编译和构建Nginx: ``` ./configure make ``` 7. 安装:编译完成后,运行以下命令将Nginx安装到目标位置: ``` make install ``` 8. 配置文件:根据您的需求,编辑Nginx的配置文件。默认情况下,配置文件位于安装目录的`conf`子文件夹中。 9. 启动Nginx:使用以下命令启动Nginx服务器: ``` nginx ``` 10. 测试:使用浏览器或命令行工具访问Nginx服务器,确保一切正常。默认情况下,Nginx监听80端口。 注意:以上步骤仅概述了基本的编译过程。在实际过程中,可能会遇到其他依赖项或配置细节,您可能需要根据具体情况做一些调整。建议参考官方文档或相关资源,以获取更详细的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值