一、软件准备



1、安装 Visual Studio 2022



包含单个组件:

  • .NET Framework 4.6.1 目标包
  • .NET Framework 4.6.1 SDK
  • Windows 通用 C 运行时
  • Windows 通用 CRT SDK
  • MSVC v142 - VS 2019 C++ x64/x86 生成工具(v14.26)
  • 对 v142 生成工具(14.21)的 C++/CLI 支持
  • Clang compile for Windows
  • Windows 10 SDK (10.0.16299.0)

Visual Studio 2022 的安装这里就不再详细说明。



2、下载源码



下载地址



请选择一个带有 RELEASE TAG 的版本进行下载,如下图:

截至目前, Nginx 的最新 release 版本为 1.26.2

Windows 11 下使用 MSVC 2022 编译64位Nginx_Windows



在左侧选择压缩包类型,点击下载即可,这里我选择ZIP



Windows 11 下使用 MSVC 2022 编译64位Nginx_windows_02



下载完成获得源码文件,解压后如下:



Windows 11 下使用 MSVC 2022 编译64位Nginx_运维_03



3、下载 pcre 源码包,解压至 objs/lib 文件夹



Windows 11 下使用 MSVC 2022 编译64位Nginx_windows_04



4、下载 zlib 源码包,解压至 objs/lib 文件夹



Windows 11 下使用 MSVC 2022 编译64位Nginx_perl_05



5、下载 openssl 的源码包,解压至 objs/lib 文件夹



Windows 11 下使用 MSVC 2022 编译64位Nginx_nginx_06



6、下载并安装 StrawberryPerl



因为需要编译 OpenSSL, 需要使用 perl 进行配置

https://strawberryperl.com/



Windows 11 下使用 MSVC 2022 编译64位Nginx_perl_07



安装,同意协议,直接next

Windows 11 下使用 MSVC 2022 编译64位Nginx_perl_08



Windows 11 下使用 MSVC 2022 编译64位Nginx_运维_09



7、下载并安装 MSYS 2



msys2 在编译阶段用作配置 Makefile

下载地址:https://www.msys2.org/



Windows 11 下使用 MSVC 2022 编译64位Nginx_nginx_10



安装,直接next ,直到安装完成

Windows 11 下使用 MSVC 2022 编译64位Nginx_运维_11



Windows 11 下使用 MSVC 2022 编译64位Nginx_Windows_12



二、编译配置



1、修改 /nginx/auto/cc/msvc 文件



MSVC 2022 对应 19.34,在 echo " + cl version: $NGX_MSVC_VER" 的上一行加上 :NGX_MSVC_VER=19.34



Windows 11 下使用 MSVC 2022 编译64位Nginx_perl_13



Windows 11 下使用 MSVC 2022 编译64位Nginx_运维_14



2、64位编译修改(32位编译忽略)



  • Step 1: 打开.\auto\lib\openssl\makefile.msvc文件


Windows 11 下使用 MSVC 2022 编译64位Nginx_运维_15



  • Step 2: 找到以下代码进行替换
  • perl Configure $(OPENSSL_TARGET) no-shared no-threads替换为perl Configure VC-WIN64A no-shared


Windows 11 下使用 MSVC 2022 编译64位Nginx_windows_16



  • Step 3 找到以下代码进行替换


  • if exist ms\do_ms.bat 替换为if exist ms\do_win64a.bat
  • ms\do_ms替换为ms\do_win64a

Windows 11 下使用 MSVC 2022 编译64位Nginx_运维_17



3、配置 Makefile
  • Step 1: 使用 msys2 的任意环境进入 nginx 源码目录
cd D:\Nginx

Windows 11 下使用 MSVC 2022 编译64位Nginx_perl_18



  • Step 2: 执行以下命令,用于生成适用于 MSVC 的 Makefile


以下命令行配置了 nginx 在 Windows 下的常用模块的编译,可以根据自己需要调整相关模块:

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/lib/pcre-8.45 \
  --with-zlib=objs/lib/zlib-1.3.1 \
  --with-openssl=objs/lib/openssl-3.3.1 \
  --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



执行成功,会出现以下界面:



Windows 11 下使用 MSVC 2022 编译64位Nginx_windows_19



  • Step 3: 打开VS对应的 X64 Native Tools Command … for VS 2022


Windows 11 下使用 MSVC 2022 编译64位Nginx_perl_20



Windows 11 下使用 MSVC 2022 编译64位Nginx_运维_21



![在这里插入图片描述]()


Step 4: 切换到Nginx根目录 执行编译命令



cd /d D:\Nginx
nmake -f objs/Makefile

如下图:

Windows 11 下使用 MSVC 2022 编译64位Nginx_Windows_22



等待编译完成,会在 nginx/objs/ 文件夹内出现 nginx.exe,如下图所示:

Windows 11 下使用 MSVC 2022 编译64位Nginx_Windows_23



nginx.exe运行依赖同级目录下存在conf、html、logs、temp目录及配置文件,否则无法启动。