Windows10 + VS2017 + Nginx-1.20.2源码 + nginx-http-flv-module-master编译出Windows版本的Nginx

  • 背景
  • 环境准备
  • 源码准备
    • 1、下载nginx-1.20.2-code.tar.gz
    • 2、下载nginx-http-flv-module-master.zip
    • 3、下载openssl-1.1.1l.tar.gz
    • 4、下载pcre-8.44.zip
    • 5、下载zlib-1.2.11.tar.gz
  • 编译准备
  • 开始编译
    • 1、Makefile生成
    • 2、编译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

Windows10下编译Nginx源码相关推荐

  1. 龙芯3a5000下编译nginx源码

    1.nginx源码获取 http://hg.nginx.org/nginx 选择tag,选择稳定版本1.22,点击gz下载gz压缩格式的源码. 2.编译环境需要安装一大堆依赖,不过我测试这台机器因为之 ...

  2. CMake编译Nginx源码

    背景 最近打算学习nginx源码,但使用clion IDE查看不支持跳转.因为源码是使用autotool维护的,而clion需要CMake管理项目.着手编译nginx源码. 环境 os : ubunt ...

  3. WINDOWS 下编译 ffmpeg 源码总结

    WINDOWS 下编译 ffmpeg 源码,有两种方式:VC.GCC 1.VC 编译:   https://github.com/ShiftMediaProject/FFVS-Project-Gene ...

  4. mac下编译安卓源码

    资源 Mac OS10.12 编译Android源码8.1 aosp编译-需翻墙 Mac下编译安卓源码 手把手教你在Mac OS下载.编译及导入Android源码 步骤 准备 磁盘空间大于180G 安 ...

  5. 从零开始,手把手教你如何在Ubuntu下编译VLC-Android源码

    前言 公司项目中使用的libvlcjni.so库文件,有点老,对Android 6.0+系统兼容性太差了,当程序运行在Android6.0+系统上时,回弹出警告框,提示libvlcjni.so:tex ...

  6. win7下编译python源码

    win7下编译python源码 下载源码: 打开网页:https://www.python.org/downloads/release/python-2710/ 下载完成后解压即可 查看文档: 其实最 ...

  7. Win7下编译mosquitto源码

    在windows下编译mosquitto源码使用的工具包括: 1.visual studio 2010(用vs .net 2003的编译器时cmake会提示未识别的c或c++编译器) 2.cmake ...

  8. 在CentOS下编译VLC源码

    在CentOS下编译VLC源码 一.下载VLC源码 二.VLC编译与安装 1.编译与安装 2.库文件 3.头文件 三.报错解决 1.configure: error: Could not find l ...

  9. 记一次失败的Windows环境编译Nginx源码

    最近想学习下nginx的源码,之前在linux环境编译安装过多次,在windows环境还是第一次尝试,遇到了不少问题,记录一下.可惜的是编译成功后,在最后运行的时候还是会报错,如果有人遇到类似的问题希 ...

  10. android .9编译,在Ubuntu 9.04下编译Android源码

    一直都是刷官方的版本,准备自己编译一下刷机. 首先是下载,Android的源码是托管在Linux Kernel的源码站点,所以版本工具是git.关于git的使用和安装请见我的另一篇文章<在Ubu ...

最新文章

  1. eclipse+ADT 进行android应用签名打包详解
  2. POJ - 2002 Squares 数正方形【二分】【哈希表】
  3. Angular 内容投影出现 No provider for TemplateRef found 错误的单步调试
  4. 导数,微分,偏导,全微分,方向导数,梯度
  5. python与材料计算公式_《从问题到程序:用Python学编程和计算》——2.11 补充材料-阿里云开发者社区...
  6. 了解令人困惑的物联网平台世界
  7. 数据库基础(2)选择,投影,连接,除法运算
  8. VBA常用实例 | OUTLOOK批量下载选中邮件中的附件
  9. 苹果电脑如何正确断网?Mac电脑断网方法
  10. 服务器删除的excel文件备份在哪里,excel自动备份文件在哪!如何找回EXCEL表格已删除的文件...
  11. flutter 中Sliver一些想法
  12. LFS(Linux From Scratch)构建过程全记录(一):准备工作
  13. python 战舰_419. 甲板上的战舰(Python)
  14. <数据库> if 条件语句的使用 SQL26 计算25岁以上和以下的用户数量
  15. 前端国际化如何对中文——>英文自动化翻译小demo
  16. C语言九九乘法表示例
  17. 人生最靠谱的投资是什么?怎么投?
  18. 北大扫地僧“火”了!手提馒头矿泉水的他,是博士毕业1年就成北大助理教授的90后!...
  19. 如何去掉友情链接的li标签的三种方法
  20. 浅析 Linux 中的时间编程和实现原理

热门文章

  1. 《Python算法教程_中文版》pdf
  2. 计算机无法安装网卡驱动,电脑经验遇到网卡驱动安装不上的问题,该如何解决呢?一起来看看...
  3. java后端使用freemarker生成echarts图表word
  4. java面试项目介绍,详细说明
  5. 如何用3D Max进行三维建模
  6. 基于Java JAAS表单的身份验证
  7. mysql 授予用户权限_mysql授权用户权限
  8. 基于Spark的电影推荐系统实现
  9. 解决npm下载包慢的方法
  10. CSS 3之美化表格样式