Windows编译Nginx源码
上一篇讲到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源码相关推荐
- CMake编译Nginx源码
背景 最近打算学习nginx源码,但使用clion IDE查看不支持跳转.因为源码是使用autotool维护的,而clion需要CMake管理项目.着手编译nginx源码. 环境 os : ubunt ...
- 记一次失败的Windows环境编译Nginx源码
最近想学习下nginx的源码,之前在linux环境编译安装过多次,在windows环境还是第一次尝试,遇到了不少问题,记录一下.可惜的是编译成功后,在最后运行的时候还是会报错,如果有人遇到类似的问题希 ...
- 龙芯3a5000下编译nginx源码
1.nginx源码获取 http://hg.nginx.org/nginx 选择tag,选择稳定版本1.22,点击gz下载gz压缩格式的源码. 2.编译环境需要安装一大堆依赖,不过我测试这台机器因为之 ...
- freeswitch源码编译windows_【Thrift】Windows编译Thrift源码及其依赖库
背景 Windows下thrift的编译还挺麻烦的,故在此记录编译thrift的时候的一些坑(2019-11-13) 第三方库(boost.libevent.openssl) 问题一:vcpkg巨慢, ...
- gitlab windows安装_【Thrift】Windows编译Thrift源码及其依赖库
背景 Windows下thrift的编译还挺麻烦的,故在此记录编译thrift的时候的一些坑(2019-11-13) 第三方库(boost.libevent.openssl) 问题一:vcpkg巨慢, ...
- windows编译Paraview源码
目录 一. 环境准备 二. 编译 1. CMake 2. Visual Studio 一. 环境准备 下载基本所需: paraview官方给了编译文档:https://github.com/Kitwa ...
- windows编译安卓源码记录
环境 Windows10 + vmware17 + ubuntu22 ubuntu环境设置 装完ubuntu系统后拖拽复制文件进去验证vmtools功能情况,如果vmtools异常很麻烦,试了n多方法 ...
- 在Windows和Linux上编译gRPC源码操作步骤(C++)
gRPC最新发布版本为v1.23.0,下面以此版本为例说明在Windows和Linux下编译过程. Windows7/10 vs2103编译gRPC源码操作步骤: 1. 需要本机已安装Git.CMak ...
- nginx源码编译、负载均衡及模块的扩展
1.nginx源码编译 实验环境: iptables和selinux关闭 redhat6.5 nginx:test1: 172.25.1.11 [root@test1 ~]# ls nginx-1.1 ...
- Nginx 源码编译安装
Nginx 源码编译安装环境 Centos7 Nginx1.8.1 下载地址:http://nginx.org/download/ 选择自己想要的版本 我这边使用1.8.1,下载地址:http: ...
最新文章
- Hibernate搭建开发环境+简单实例(二)
- PostgreSQL9.5:pg_rewind 快速恢复备节点
- 68 cookie在登录中的作用
- java学习(30):巩固练习
- javascript犀牛书_犀牛书作者:最该忘记的JavaScript特性
- Redis从入门到精通:中级篇
- 解析UML箭头、线条代表的意义
- 并发编程学习之阻塞队列BlockingQueue和LinkedBlockingQueue
- 重点人员动态管控系统开发,公安情报研判分析平台建设
- ppt保存类型中无html,ppt模板怎么保存
- 国培计算机音乐教学设计作业,2017国培计划教学设计
- 统计图表插件Chart.js(前端常用图表)
- 盘一盘 Python 系列 - SciPy
- 深入浅出讲解FOC控制与SVPWM技术
- android 单手模式 cm,怎么开启单手模式 安卓自定义单手操作模式缔造教程
- Netcraft中国SSL市场份额统计,沃通WoSign跃居第二
- 商标TM和R有什么区别
- 大一大二的小设计作品集合(yuan)
- 癸酉本石头记后二十八回
- 701计算机科学综合,计算机科学与技术学院“不忘初心、牢记使命”系列主题教育 “迎新杯”辩论赛总决赛...