上一篇讲到nginx 1.7.11.3 Gryphon版本无法支持http2,于是心生一计:自己编译源码构建一个自己的版本。

1、需要工具

perl:ActivePerl_v5.28.1.0000.exe

msys2:msys2-x86_64-20180531.exe

nginx源码:nginx-861f076eab72.zip

rtmp插件:nginx-rtmp-module-1.2.2.tar.gz

openssl:openssl-1.0.2u.tar.gz

pcre:pcre-8.42.tar.gz

zlib:zlib-1.2.11.tar.gz

VisualStudio2015:vs2015.2.com_chs-VS2015.iso(选择功能的时候记得多勾选VisualC++移动开发选项(为了使用nmake命令工具:VS2015 x64 本机工具命令提示符),其他都默认即可)

Win64OpenSSL-3_0_3.exe【可选】该程序在这里只用作配合生成SSL证书。

一键下载: https://pan.baidu.com/s/1JwPbpiDv3FwofPP9HD72VQ 提取码: gw5h 也可以根据文件名字去搜官网但是里面有很多坑。

2、VusualStudio2015安装

注意选中Visucal C++移动开发,这样才会在win菜单中多出nmake工具[ VS2015 x64 本机工具命令提示符 ]

3、msys2安装

直接下一步下一步即可,安装完成记得配置环境变量

4、Nginx源码解压

Nginx源码解压到msys2文件目录的home目录中,并在nginx文件夹中新建文件夹build/lib

里面存放nginx依赖的其他模块源码(解压后的):nginx-rtmp-module-1.2.2、openssl-1.0.2u、pcre-8.42、zlib-1.2.11

目录结构如下图:

4.1、修改32位nginx源码为64位(可选)

编辑nginx\auto\lib\openssl\makefile.msvc文件

“VC-WIN32”替换为“VC-WIN64A”

“if exist ms\do_ms.bat”替换为“if exist ms\do_win64a.bat”

“ms\do_ms”替换为“ms\do_win64a”

4.2、使用msys2工具编译

msys2工具不懂的教你一招:直接cd /   然后ls命令看看熟不熟悉,是不是和linux系统长得差不多

进入到/home目录查看文件ls,可以看到刚解压放进去的nginx文件,cd nginx

再然后执行命令:

auto/configure --with-cc=cl --builddir=objs \
--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-select_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_stub_status_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-mail \
--with-stream \
--with-openssl-opt=no-asm \
--with-http_ssl_module \
--with-mail_ssl_module \
--with-stream_ssl_module \
--with-openssl=./build/lib/openssl-1.0.2u \
--with-pcre=./build/lib/pcre-8.42 \
--with-zlib=./build/lib/zlib-1.2.11 \
--add-module=./build/lib/nginx-rtmp-module-1.2.2/ 

4.3、使用nmake工具生成可执行文件

因为引入了nginx-rtmp-module模块,nmake生成exe过程会报错,各种上网查,最后发现需要修改objs\Makefile文件

报错信息:

修改生成的文件nginx\objs\Makefile,找到第3行:CFLAGS =......    去掉 -WX  即可,去掉后需要重新执行nmake命令编译。

使用nmake工具生成nginx.exe文件(nmake工具在win菜单里面找到VisualStudio文件夹下的VS2015 x64 本机工具命令提示符)cd到nginx所在目录后执行:nmake -f objs/Makefile

最后可能会报一些不影响大雅的错误,反正nginx.exe生成了就能用了,也没仔细去研究怎么优化,有时间再搞。

本篇文章目的已达到,包含多个功能模块的nginx.exe生成。

=============================分隔=================================

5、Nginx配置SSL。

5.1、生成SSL证书

安装Win64OpenSSL-3_0_3.exe工具,配置环境变量

验证:cmd中执行openssl help命令即可

使用CMD命令行生成证书步骤

客户端:(生成的CA-certificate.crt需要导入到证书管理里面的受信任的根证书颁发机构

1、生成ca证书【CA-certificate.crt】和ca私钥【CA-private.key】

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -subj "/C=CN/ST=MyProvince/L=MyCity/O=BearOS" -out CA-certificate.crt -keyout CA-private.key -reqexts v3_req -extensions v3_ca

服务端:(生成的private.key和private.crt需要放到nginx里面

2、生成私钥【private.key】

openssl genrsa -out private.key 2048

3、生成证书请求文件【private.csr】

(-subj是附加企业信息:BeiJing、Beijing、企业名BearOS、请求颁发的目标网址kuaishou.bearos.com)

openssl req -new -key private.key -subj "/C=CN/ST=BeiJing/L=BeiJing/O=BearOS/CN=a.b.com" -sha256 -out private.csr

4、新建文本文件private.ext

文件内容:

[ req ]
default_bits        = 1024
distinguished_name  = req_distinguished_name
req_extensions      = san
extensions          = san
[ req_distinguished_name ]
countryName         = CN
stateOrProvinceName = Definesys
localityName        = Definesys
organizationName    = Definesys
[SAN]
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
#subjectAltName = IP:127.0.0.1
subjectAltName = @alt_names
[ alt_names ]
IP.1 = 127.0.0.1
DNS.1 = a.b.com
DNS.2 = localhost
DNS.3 = 127.0.0.1

5、生成自签名证书【private.crt】

根据根证书私钥【CA-private.key】,根证书【CA-certificate.crt】,自签名证书申请文件【private.csr】,自签名证书扩展文件【private.ext】,生成自签名证书【private.crt】

(参数 -days是有效天数,经网上查得知最多24年左右)

openssl x509 -req -days 3650 -in private.csr -CA CA-certificate.crt -CAkey CA-private.key -CAcreateserial -sha256 -out private.crt -extfile private.ext -extensions SAN

最后生成两个可以用在nginx里面的文件:server.crt、server.key

6、将CA-certificate.crt证书导入到电脑上受信任的根证书颁发机构里面。

可以从浏览器进入证书管理窗口,也可以win+R输入certmgr.msc进入。

将private.cat、private.key两个文件放到nginx/conf/ssl目录下,并配置nginx.conf

5.2、nginx.conf配置

server{#https监听443端口listen 443 ssl http2;#对应的域名server_name xxx.xxx.xxx.xxx;#SSL-START SSL相关配置#HTTP_TO_HTTPS_START#强制使用httpsif ($server_port !~ 443){rewrite ^(/.*)$ https://$host$1 permanent;}#HTTP_TO_HTTPS_END#注释掉ssl on; 是为了让此server同时处理http和https#ssl on;#获取到的第一个文件的全路径ssl_certificate ssl/private.crt;#获取到的第二个文件的全路径ssl_certificate_key ssl/private.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;#SSL-ENDlocation / {alias  D:\\Apps\\nginx-server\\kuaishou-manager-web\\;index  index.html index.htm;}#hls直播地址location /hls {types {application/vnd.apple.mpegurl m3u8; #或 application/x-mpegURLvideo/mp2t ts;}alias D:/videos/vod/;  #点播视频文件(.ts;.m3u8)存放位置expires -1;add_header Cache-Control no-cache; #跨域支持,不然网页播放不了add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";}}

5.3、最终结果

Windows编译Nginx源码相关推荐

  1. CMake编译Nginx源码

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

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

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

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

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

  4. freeswitch源码编译windows_【Thrift】Windows编译Thrift源码及其依赖库

    背景 Windows下thrift的编译还挺麻烦的,故在此记录编译thrift的时候的一些坑(2019-11-13) 第三方库(boost.libevent.openssl) 问题一:vcpkg巨慢, ...

  5. gitlab windows安装_【Thrift】Windows编译Thrift源码及其依赖库

    背景 Windows下thrift的编译还挺麻烦的,故在此记录编译thrift的时候的一些坑(2019-11-13) 第三方库(boost.libevent.openssl) 问题一:vcpkg巨慢, ...

  6. windows编译Paraview源码

    目录 一. 环境准备 二. 编译 1. CMake 2. Visual Studio 一. 环境准备 下载基本所需: paraview官方给了编译文档:https://github.com/Kitwa ...

  7. windows编译安卓源码记录

    环境 Windows10 + vmware17 + ubuntu22 ubuntu环境设置 装完ubuntu系统后拖拽复制文件进去验证vmtools功能情况,如果vmtools异常很麻烦,试了n多方法 ...

  8. 在Windows和Linux上编译gRPC源码操作步骤(C++)

    gRPC最新发布版本为v1.23.0,下面以此版本为例说明在Windows和Linux下编译过程. Windows7/10 vs2103编译gRPC源码操作步骤: 1. 需要本机已安装Git.CMak ...

  9. nginx源码编译、负载均衡及模块的扩展

    1.nginx源码编译 实验环境: iptables和selinux关闭 redhat6.5 nginx:test1: 172.25.1.11 [root@test1 ~]# ls nginx-1.1 ...

  10. Nginx 源码编译安装

    Nginx 源码编译安装环境 Centos7 Nginx1.8.1    下载地址:http://nginx.org/download/ 选择自己想要的版本 我这边使用1.8.1,下载地址:http: ...

最新文章

  1. Hibernate搭建开发环境+简单实例(二)
  2. PostgreSQL9.5:pg_rewind 快速恢复备节点
  3. 68 cookie在登录中的作用
  4. java学习(30):巩固练习
  5. javascript犀牛书_犀牛书作者:最该忘记的JavaScript特性
  6. Redis从入门到精通:中级篇
  7. 解析UML箭头、线条代表的意义
  8. 并发编程学习之阻塞队列BlockingQueue和LinkedBlockingQueue
  9. 重点人员动态管控系统开发,公安情报研判分析平台建设
  10. ppt保存类型中无html,ppt模板怎么保存
  11. 国培计算机音乐教学设计作业,2017国培计划教学设计
  12. 统计图表插件Chart.js(前端常用图表)
  13. 盘一盘 Python 系列 - SciPy
  14. 深入浅出讲解FOC控制与SVPWM技术
  15. android 单手模式 cm,怎么开启单手模式 安卓自定义单手操作模式缔造教程
  16. Netcraft中国SSL市场份额统计,沃通WoSign跃居第二
  17. 商标TM和R有什么区别
  18. 大一大二的小设计作品集合(yuan)
  19. 癸酉本石头记后二十八回
  20. 701计算机科学综合,计算机科学与技术学院“不忘初心、牢记使命”系列主题教育 “迎新杯”辩论赛总决赛...

热门文章

  1. python去除停用词_python jieba分词如何去除停用词
  2. vex编程语言是基于c语言,vex机器人编程软件 vex机器人大赛
  3. 财务分析思维导图模板分享
  4. 供应链运作参考模型(SCOR):一种用于改善供应链管理的模型
  5. solidworks分析视频教程-结构应力仿真有限元虚拟样机及流场分析
  6. IoT物联网天线有哪些?
  7. 调用大漠插件5.1423
  8. psftp 上传和下载
  9. Ecshop小京东支付插件【小京东个人支付宝即时到帐支付插件支持PC电脑版+手机版】
  10. tomcat的工作原理