前言

Nginx 在 Windows 下还是很实用的,可以作为前端的 HTTP 部署测试工具,或者当然可以用 Python 自带的 http.server 来部署,都挺快的。除了部署前端项目之外,放一些自制的基于 Web 的小工具都是极好的。

下载源码包

Nginx 源码

Nginx 在 Windows 下编译的源码与 Linux 下的不同,直接从官网的 download 里面下载是编译不过的,需要从下面的 Mercurial 链接下载,至于什么是 Mercurial, 这也是一种类似于 Git 的版本管理工具

下载地址: http://hg.nginx.org/nginx

注意,请选择一个带有 RELEASE TAG 的版本进行下载,如下图橙色方框所示

下载页面

截至发文, Nginx 的最新 realease 版本为 1.21.0

然后在左侧选择你偏好的压缩包类型,点击下载即可

选择压缩包

将其解压至一个你喜欢的位置,例如我解压在 D:\nginx\1.21.0

依赖源码

在 Nginx 源码根目录下创建 objs/lib 文件夹

依次下载 pcre / zlib / openssl 的源码包,解压至 objs/lib 文件夹

注意:pcre版本为1,即8.x,不要下载pcre2,即10.x开头的版本

依赖包

MSYS 2

msys2 在编译阶段仅用作配置 Makefile,因本文介绍的是在 MSVC 环境下的编译,所以不用 msys2 的 GNU 环境进行编译。

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

Tip: Git 的 Bash 环境也可以用作后面开始编译的配置 Makefile

开始编译

配置 Makefile

安装完成 msys2 后,使用 msys2 的任意环境或 Git Bash 进入 nginx 源码目录,执行以下命令,用于生成适用于 MSVC 的 Makefile

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.44 \
    --with-zlib=objs/lib/zlib-1.2.11 \
    --with-openssl=objs/lib/openssl-1.1.1k \
    --with-openssl-opt=no-asm \
    --with-http_ssl_module \

请提前自行创建目录 logstemp\client_body_temptemp\proxy_temptemp\fastcgi_temptemp\scgi_temp,否则执行脚本会提示目录不存在

若脚本执行如果提示

auto/cc/msvc: line 117: [: : integer expression expected

是因为读取不到 VC 编译器的版本,需要手动指定。

打开 VS2019 的 VC 命令行,输入 cl 就能查看编译器版本了。

编译器版本

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

手动指定 MSVC 版本

再次执行生成 Makefile 的命令,不报错即通过。

进行编译

VC命令行

打开 VS2019 的 VC 命令行,注意选择 Native Tools,不要选择 Cross Tools。

cd 到源码根目录后,执行编译命令

nmake –f objs/Makefile

编译过程较久,视 CPU 单核性能而定,耗时十分钟到半小时不等。

当没有报错退出时, Nginx 即编译完成。

整理文件

将源码目录下的confcontrib html logs tempobjs\nginx.exe 整理到一个目录下,双击打开 nginx.exe,命令行一闪而过,打开浏览器输入 https://localhost/http://127.0.0.1/ 看到以下页面即成功。

success.png

输入以下命令结束运行 Nginx

nginx.exe -s stop

结语

至此,Nginx 在 Windows 10 下,使用 MSVC 2019 的完整编译过程结束,任何报错,不明白请在下方评论区留言!

最后修改:2021 年 06 月 14 日 06 : 09 PM
如果觉得我的文章不错的话,请我喝一杯咖啡吧~