前言
Nginx 在 Windows 下还是很实用的,可以作为前端的 HTTP 部署测试工具,或者当然可以用 Python 自带的 http.server 来部署,都挺快的。除了部署前端项目之外,放一些自制的基于 Web 的小工具都是极好的。
下载源码包
Nginx 源码
Nginx 在 Windows 下编译的源码与 Linux 下的不同,直接从官网的 download 里面下载是编译不过的,需要从下面的 Mercurial 链接下载,Mercurial 也是一种类似于 Git 的版本管理工具
下载地址: http://hg.nginx.org/nginx
注意,请选择一个带有 RELEASE TAG 的版本进行下载,如下图橙色方框所示

Windows 10 下使用 MSVC 2019 编译 Nginx 64位过程记录
下载页面
截至发文, Nginx 的最新 release 版本为 1.21.4
然后在左侧选择你偏好的压缩包类型,点击下载即可

Windows 10 下使用 MSVC 2019 编译 Nginx 64位过程记录
选择压缩包
将其解压至一个你喜欢的位置,例如我解压在 D:\nginx\1.21.4
依赖源码
在 Nginx 源码根目录下创建 objs/lib 文件夹
依次下载 pcre / zlib / openssl 的源码包,解压至 objs/lib 文件夹
注意:pcre版本为1,即8.x,不要下载pcre2,即10.x开头的版本

Windows 10 下使用 MSVC 2019 编译 Nginx 64位过程记录
依赖包
StrawberryPerl
因为需要编译 OpenSSL, 需要使用 perl 进行配置
https://strawberryperl.com/
MSYS 2
msys2 在编译阶段仅用作配置 Makefile,因本文介绍的是在 MSVC 环境下的编译,所以不用 msys2 的 GNU 环境进行编译。
下载地址:https://www.msys2.org/
Tip: Git 的 Bash 环境也可以用作后面开始编译的配置 Makefile
开始编译
配置 64 位 OpenSSL
重要!本文编译64位 Nginx,配置 Makefile 前需要将 OpenSSL 依赖库改为64位 进入 nginx/auto/lib/openssl 使用编辑器打开makefile.msvc 将第 9 行的 VC-WIN32 改成 VC-WIN64A
配置 Makefile
安装完成 msys2 后,使用 msys2 的任意环境或 Git Bash 进入 nginx 源码目录,执行以下命令,用于生成适用于 MSVC 的 Makefile
以下命令行配置了 nginx 在 Windows 下的常用模块的编译,请根据自己需要调整相关模块的加入或删除
加入的特性包括 HTTP 2,SSL/TLS HTTPS 支持,HTTP 流媒体支持,socket 流转发支持,mail 服务器支持
|
auto/configure \
--with-cc=cl \
--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/pcre-8.45 \
--with-zlib=objs/zlib-1.2.11 \
--with-openssl=objs/openssl-3.0.0 \
--with-openssl-opt='no-asm no-tests -D_WIN32_WINNT=0x0601' \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_stub_status_module \
--with-http_dav_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-mail_ssl_module \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module
|
请提前自行创建目录 logs、temp\client_body_temp、temp\proxy_temp、temp\fastcgi_temp、temp\scgi_temp,否则执行脚本会提示目录不存在
若脚本执行如果提示 auto/cc/msvc: line 117: [: : integer expression expected
是因为读取不到 VC 编译器的版本,需要手动指定。
打开 VS2019 的 VC 命令行,输入 cl 就能查看编译器版本了。

Windows 10 下使用 MSVC 2019 编译 Nginx 64位过程记录
编译器版本
打开 auto/cc/msvc 文件,在文件的 NGX_MSVC_VER=... 下方添加如下代码,即手动指定 MSVC 编译器的版本(采用截图原因是方便定位添加代码的位置)

Windows 10 下使用 MSVC 2019 编译 Nginx 64位过程记录
手动指定 MSVC 版本
再次执行生成 Makefile 的命令,不报错即通过。
进行编译

Windows 10 下使用 MSVC 2019 编译 Nginx 64位过程记录
VC命令行
打开 VS2019 的 VC 命令行,注意选择 Native Tools,不要选择 Cross Tools。
cd 到源码根目录后,执行编译命令
编译过程较久,视 CPU 单核性能而定,耗时十分钟到半小时不等。
当提示 sed 不是内部命令或外部命令时就代表编译成功了,忽略 nmake 的报错,因为 sed 是 Linux 下的命令
没有其它报错退出时, Nginx 即编译完成。
整理文件
将源码目录下的conf、contrib html logs temp 和 objs\nginx.exe 整理到一个目录下,双击打开 nginx.exe,命令行一闪而过,打开浏览器输入 http://localhost/ 或 http://127.0.0.1/ 看到以下页面即成功。

Windows 10 下使用 MSVC 2019 编译 Nginx 64位过程记录
success.png
输入以下命令结束运行 Nginx
笔者编译的版本
版本:1.21.4 版本信息:
|
nginx version: nginx/1.21.4
built by cl 19.30.30706
built with OpenSSL 3.0.0 7 sep 2021
TLS SNI support enabled
configure arguments: --with-cc=cl --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/pcre-8.45 --with-zlib=objs/zlib-1.2.11 --with-openssl=objs/openssl-3.0.0 --with-openssl-opt='no-asm no-tests -D_WIN32_WINNT=0x0601' --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_stub_status_module --with-http_dav_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-mail_ssl_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module
|
下载地址:点击这里
结语
至此,Nginx 在 Windows 10 下,使用 MSVC 2019 的完整编译过程结束,任何报错,不明白请在下方评论区留言!
除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《Windows 10 下使用 MSVC 2019 编译 Nginx 64位过程记录》
文章链接:
https://www.xlin.cn/xlbk/21023.html。