分类
服务器部署

在 windows 上编译 nginx,以使用 nginx-rtmp-module 模块

注:这是一个客户需求,本文仅做记录。实际使用中不建议在 windows 上使用 nginx ,因为 windows 上的 nginx 至今还是 select 模型,没有 IOCP ,不堪重负。

操作系统:Windows 7 SP1(虚拟机环境)
编译工具:Visual Studio 2010(主要是使用其编译工具)

准备工作

  • 安装 Strawberry Perl: windows 版本的 perl
    下载地址:https://strawberryperl.com/download/5.32.1.1/strawberry-perl-5.32.1.1-32bit.msi

下载依赖包:pcre,zlib,openssl

pcre 下载地址:https://ftp.pcre.org/pub/pcre/
这里下载的是8.45版本

zlib 下载地址:https://zlib.net/
这里下载的是1.2.11版本

openssl 下载地址:https://www.openssl.org/source/
这里下载的是openssl-1.1.1l版本

因为要用到 rtmp 模块,所以,这里额外下载 rtmp 模块代码
nginx-rtmp-module 下载地址:https://codeload.github.com/arut/nginx-rtmp-module/zip/refs/tags/v1.2.2
下载最新的1.2.2版本

开始编译

打开 mysys2 ,使用 hg 下载最新的 nginx 源代码,执行命令:

hg clone http://hg.nginx.org/nginx

在 nginx 源码目录下新建目录 ojbs/lib ,把下载好的依赖包放到该目录中,如下图:

objs/lib目录下解压好的文件

在 mysys2 中安装编译工具:

pacman -S gcc make

执行如下命令,用来生成 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.45 \
    --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 \
    --add-module=objs/lib/nginx-rtmp-module-1.2.2

执行完成之后,打开 Visual Studio 2010 命令提示行,进入 nginx 源码目录,执行命令:

nmake -f objs/Makefile

接下来就是等待编译完成。

编译完成之后,会提示找不到命令 sed ,不用理会。

编译完成,找不到 sed 忽略即可。

最后,到 objs 目录下找到新鲜出炉的 Nginx.exe 。

编译生成的 nginx

运行

为了让编译后的 Nginx.exe 能运行起来,我们需要到 Nginx 官网下载一个官方编译的压缩包,解压后,把我们生成的 Nginx.exe 替换官方的即可。

官方编译好的 nginx for windows 二进制文件
最终的目录结构。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注