windows 编译nginx源码及模块

windows 编译nginx源码及模块


一、环境准备

  • msys2 安装
    • 安装包下载
      官方下载地址https://www.msys2.org ,官网下载速度较慢,可以使用如下地址
      清华的镜像地址:https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/
      中国科学技术大学的镜像地址:https://mirrors.ustc.edu.cn/msys2/distrib/
      我下载的版本是msys2-x86_64-20190524.exe,本教程使用本版本
    • 安装配置
      默认安装即可:选择对应的安装路径,下一步下一步即可
    • 使用
      安装后有如下三个快捷键 
      根据你要编译的机器对象【x86/x64】选择对应的快捷方式打开程序,或者选择MSYS2 MSYS让程序根据机器选择。
  • ActivePerl 安装
    • 安装包下载
      官方下载地址https://www.activestate.com/products/perl/downloads/,根据需要下载你所需要的版本,本教程使用的是ActivePerl-5.26.1.2601-MSWin32-x64-404865
    • 安装配置
      默认安装即可,安装时注意勾选【注册到环境变量path】这一栏(默认开启)
  • sed 安装
    • 下载
      官方下载地址http://gnuwin32.sourceforge.net/packages/sed.htm 个人根据情况下载setup安装包或者二进制压缩包,需要手动配置环境变量path到sed文件所在的bin文件夹
    • 安装配置
      配置环境变量后,打开命令框,输入 sed --version查看是否配置完成,如下图

      此步骤可以不做,编译时报sed命令错误,但是不影响编译结果
  • vc++ 2019 开发工具【vs2019】安装
    • 安装配置
      微软官方下载Visual studio 2019安装包,安装时记得选择VC++相关安装选项
    • 工具使用
      安装完成后,在开始菜单,找到Visual studio 2019文件夹,里面内容如下:

      根据编译平台的实际情况选择打开对应的X86/X64 native Tools Command Prompt 命令框
  • 下载pcre源码
  • 下载zlib源码
  • 下载openssl源码
    • 下载
      官方地址[https://www.openssl.org/]
      Github下载地址https://github.com/openssl/openssl
      本教程使用openssl-OpenSSL_1_0_1u,此处建议使用本版本,根据网友所说其他版本会报错,当初本着尝试的精神,测试了很多版本后发现编译ssl时会编译报错,因此血泪的教训让我在此强调使用1_0_1u版本

二、 nginx源码编译

  • 源码下载
    建议下载官方release版本,下载地址[http://hg.nginx.org/nginx/]http://hg.nginx.org/nginx/

    本教程使用编写此文档时最新版本:1.17.9
  • 编译准备
    1. 创建对应的文件夹
      下载nginx源码后解压到某磁盘的根目录下:在源码文件夹内新增objs文件夹,如下图:

      打开objs文件夹,在下面创建lib和modules 分布存放要编译的lib 组件源码及第三方module源码,以便于编译到nginx.exe内,结构如图:

      整体结构图如下:
      ├── nginx //nginx源码根目录
      │ ├──auto
      │ ├──conf
      │ ├──contrib
      │ ├──misc
      │ ├──objs //新建该文件夹
      │ │ ├──lib //新建该文件夹
      │ │ ├──modules //新建该文件夹
      │ ├──src

    2. 修改编译文件
      a. 修改msvc文件
      打开文件 \nginx\auto\cc\msvc
      添加如下内如:


      b. 修改makefile.msvc文件
      打开文件 \nginx\auto\lib\openssl\makefile.msvc

    3. 修改源码
      打开源码 \nginx\src\http\ngx_http_header_filter_module.c

  • make编译
    1. 创建makefile文件
<span style="color:#333333">auto/configure --with-cc<span style="color:#a71d5d">=</span>cl --builddir<span style="color:#a71d5d">=</span>objs --prefix<span style="color:#a71d5d">=</span> \
--conf-path<span style="color:#a71d5d">=</span>conf/nginx.conf --pid-path<span style="color:#a71d5d">=</span>logs/nginx.pid \
--http-log-path<span style="color:#a71d5d">=</span>logs/access.log --error-log-path<span style="color:#a71d5d">=</span>logs/error.log \
--sbin-path<span style="color:#a71d5d">=</span>nginx.exe --http-client-body-temp-path<span style="color:#a71d5d">=</span>temp/client_body_temp \
--http-proxy-temp-path<span style="color:#a71d5d">=</span>temp/proxy_temp \
--http-fastcgi-temp-path<span style="color:#a71d5d">=</span>temp/fastcgi_temp \
--http-scgi-temp-path<span style="color:#a71d5d">=</span>temp/scgi_temp \
--http-uwsgi-temp-path<span style="color:#a71d5d">=</span>temp/uwsgi_temp \
--with-cc-opt<span style="color:#a71d5d">=</span>-DFD_SETSIZE<span style="color:#a71d5d">=</span>1024 --with-pcre<span style="color:#a71d5d">=</span>objs/lib/pcre \
--with-zlib<span style="color:#a71d5d">=</span>objs/lib/zlib --with-openssl<span style="color:#a71d5d">=</span>objs/lib/openssl \
--with-select_module --with-http_ssl_module --with-ipv6 \
--with-http_stub_status_module \
--with-http_flv_module --with-http_mp4_module \  <span style="color:#969896">#编译带flv 和mp4支持功能</span>
--add-module<span style="color:#a71d5d">=</span>objs/modules/nginx-http-flv-module \  <span style="color:#969896">#编译第三方模块 flv</span>
--add-module<span style="color:#a71d5d">=</span>objs/modules/nginx-vod-module --with-file-aio --with-threads --with-cc-opt<span style="color:#a71d5d">=</span><span style="color:#183691">"-O3"</span>
<span style="color:#969896">## 编译第三方模块 vod </span>
</span>

注意:配置项目中对应文件的存储路径
根据目标机器打开对应的MSYS2,进入对应的nginx源码目录,输入要生成makefile文件语句,如下图:

<span style="color:#333333"> 2. make编译文件
</span>

打开vs2019对应的x64/x86 本地命令工具,cd 到nginx对应的源码目录,输入

<span style="color:#333333">nmake -f objs/Makefile
</span>

如下图所示:

三、 测试使用

objs目录下生成的nginx.exe就是自己编译的文件,从网址下载对应的nginx二进制包,替换其他的nginx.exe文件,配置对应的nginx.conf即可正常使用

四、 常用第三方库总结

  1. nginx-http-flv-module模块https://github.com/winshining/nginx-http-flv-module
    改模块包含nginx-rtmp-module模块的全部内容
  2. nginx-vod-module 模块

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx for Windows v1 5 9 source code Nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件IMAP POP3)代理服务器 并在一个BSD like 协议下发行 Nginx由俄罗斯的程序设计师Igor Sysoev所开发 可供大型的门户网站及搜索引擎使用 Nginx是一个很强大的高性能Web和反向代理服务器 它具有很多非常优越的特性 Nginx可以在大多数 Unix like OS 上编译运行 在Linux和unix上分别采用epoll和kqueue网络模型 能够支持高达 50 000 个并发连接数的响应(实际上可能更大) Nginx支持与客户端建立SSL安全连接 因此可以作为SSL安全网关使用 NginxWindows移植版 在Windows平台上支持select和iocp两种网络IO模型 在Windows平台上 Nginx的表现可能没有在其它平台上那么优秀 从目前的版本看 Nginx主要有以下几点可能需要改进的地方: 1 Nginx采用多进程并行处理的运行方式 不支持多线程(似乎各平台下都不支持多线程) 2 在Windows下 只支持select和iocp两种网络IO模型 其中iocp模型虽然可以支持高并发连接 但目前版本的iocp只支持Web服务器(有的版本使用iocp作WEB服务器都跑不通) 不支持反向代理服务器 更不支持SSL连接;而select模型不能支持高并发连接 如果要实现高并发 必须使用非常多的进程 3 由于Windows vista之后版本的共享内存在不同进程中的地址不同 因此 在启用多进程时 不能使用共享内存来做SSL的session缓存 也就是说 要实现SSL 只能使用单进程 从而限制了并发连接数 (造成这种结果的原因 可能是作者对NginxWindows平台下的应用不太重视 在共享内存中使用了绝对地址指针 如果改成相对地址偏移则可避免) 笔者试图突破上面的限制 在 Nginx v1 5 9 的基础上作了三点改进: 1 完善iocp模型 使其能够支持代理服务器 2 增加wsa网络IO模型(Windows socket异步IO模型) 该模型支持WEB服务器 反向代理服务器和SSL安全连接 与Linux下的epoll具有同等的功能和效率 3 增加Windows和Linux平台下的多线程支持(Unix下尚未实现) 多线程可支持select epoll wsa和iocp网络IO模型 并支持SSL连接 通过上述改进 NginxWindows平台下的性能得到大幅提高 其并发连接数一般情况下可达到10万以上 最多可达到40万个 如何使用wsa网络IO模型 与使用iocp模型类似 在配置文件中 增加配置项: use wsa; 如何使用多线程 在配置文件中 增加配置项: worker threads 50; 线程数最大128 nginx v1 5 9 win src在vs2008环境下开发 笔者邮箱: xiong rh@sina com">Nginx for Windows v1 5 9 source code Nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件IMAP POP3)代理服务器 并在一个BSD like 协议下发行 Nginx由俄罗斯的程序设计师Igor Sysoev所开发 可供大型的门户网站及搜索引擎使用 [更多]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值