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. [泰然翻译] cocos2d programming guide 场景和菜单
  2. 专家提醒:计算机专业毕业生求职三要点!
  3. php+json对象格式,PHP 创建对象来输出 JSON 格式
  4. Oracle HA 之 oracle 11.2 rac库配置active dataguard
  5. Mybatis源码阅读(一):Mybatis初始化1.1 解析properties、settings
  6. JEECG整合finereport快速搭建与开发
  7. 如何开展工业视觉检测?Halcon 圣经告诉你答案
  8. HRESULT是什么类型
  9. Python模拟入栈出栈操作
  10. 联通3G用户破千万 建成全球规模最大WCDMA网络
  11. 关于逻辑或的一个小小应用注意点
  12. android播放视频功能,android surfaceView实现播放视频功能
  13. [BootStrap学习随笔] 起步、布局容器和栅格式布局
  14. SPI总线接口与简单配置
  15. Python实现好友管理系统
  16. python怎么用拼音-用Python写一个拼音输入法
  17. Android 仿自如APP裸眼3D效果
  18. 去掉字符串首尾指定字符
  19. 批量下载NCBI各种数据的方法集合
  20. 一年赚一百万很简单(穷人翻身唯一出路)

热门文章

  1. 阿里云DataV与百度Sugar使用比较
  2. 超好用的 Windows 效率工具推荐
  3. vivado使用方法
  4. Cadence Allegro学习之PCB封装库的导出
  5. 【初识】汽车诊断协议 UDS / DoIP
  6. 微信小程序简单论坛实现demo,供参考。
  7. ctf misc 图片题知识点
  8. FinePrint双面打印设置
  9. JSONObject.fromObject 找不到这个方法或是报错
  10. 企业销售统计管理页面ui模板