win源码编译-[Windows] windows环境下编译Nginx

前言:

官方给出的编译步骤是:

但按照推荐的步骤进行并不是很顺利,而且还有很多陷阱。 这里记录一下,同时总结出一个完全可靠的解决过程。

准备:

1、windows下C语言编译器

windows下的c语言编译器可以通过安装vs来获得,安装完成后会在对应的bin目录下(刚安装完vs后)。

2.Linux模拟工作环境MSYS

msys是一个模拟环境,里面包含了90多个通用的linux命令,让我们可以在windows系统上运行linux命令,可以理解为linux环境下各种工具的跨平台windows版本集合。 这就是为什么我们可以使用windows平台上的configure工具。

下载路径:

注意:这里只需要MSYS,因为最终编译时使用的是nmake而不是linux makewin源码编译,所以不需要安装mingw,使用起来太复杂。

3.项目配置脚本工具Perl

建议使用5.30以上版本。 我发现28版本在使用openssl时配置好像有问题。

下载路径:

ps: ActivePerl 和 Strawberry Perl 都可以

4.使用Mercurial获取Nginx源码

这是代码管理仓库的配套工具,相当于使用git工具从github下载代码。

下载路径:

不建议使用这个工具下载Nginx源码,因为虽然国外网络不通,但总会出现各种问题,所以可以直接从官网下载代码进行编译。

红框里的是源代码win源码编译,哪一个是Windows编译的release版本,我们要自己编译,所以他的release版本不适用。

有时在向外界发布源代码时,会出现“权重不够,两件事”的问题。 建议多下载几个进行一次编译,或者找源码下载。

5、准备Nginx的依赖库

Nginx的各个主要功能弱依赖一些第三方库:zlib、openssl、pcre。 其中openssl推荐使用1.0.x版本。 我在编译1.1.x的时候遇到了一些奇怪的问题,最后没有研究为什么(毕竟只是为了可用性)。

zlib下载路径:

PCR下载路径:

openssl下载路径:

ps:下载完源码后,你不需要自己编译那些项目,只需要解压它们,Nginx稍后会把它们一起编译(这个很方便)。

解压下载的包,然后在源码路径下创建objs/lib/目录,并解压到其中:

6.Nginx源码需要调整

找到 /nginx/src/http/ngx_http_header_filter_module.c 文件,找到以下变量的声明:

static u_char ngx_http_server_string[] = "Server: nginx" CRLF;
static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;     

变成

static u_char ngx_http_server_string[] = "Server: " CRLF;
static u_char ngx_http_server_full_string[] = "Server:  " CRLF;
static u_char ngx_http_server_build_string[] = "Server: " CRLF;

64 位编译更改(被 32 位编译忽略)

打开 nginxautolibopensslmakefile.msvc 文件。

找到“VC-WIN32”并替换为“VC-WIN64A”;

“如果存在 msdo_ms.bat”替换为“如果存在 msdo_win64a.bat”;

“msdo_ms”被替换为“msdo_win64a”。

7. 项目配置Configure

完成上述步骤后,就可以进行编译工程的配置了。 通用模板如下:

auto/configure --with-cc=cl --builddir=objs --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 
--with-zlib=objs/lib/zlib 
--with-openssl=objs/lib/openssl 
--with-select_module --with-http_ssl_module

注意:需要在源代码路径中指定-with-zlib、-with-openssl、-with-pcre这三个配置的值。

这里也采用了官方文档推荐的目录结构,即在Nginx源码根目录下创建objs文件夹,然后将这三个依赖库放在objs/lib/路径下。

执行上述命令后,将生成Makefile。

编译和部署:

1. 编译

编译时需要注意的是,nmake依赖于windows开发环境变量,所以不能使用普通的cmd命令行来运行nmake,而是使用vs提供的包含开发环境的命令行。

打开后,切换到Nginx源码根路径,执行:

nmake -f objs/Makefile

然后等待编译成功。

2. 部署

a) 将objsnginx.exe复制到上级目录

b) 创建文件夹logs、temp、html

3.删除多余文件

nginx目录下,如图所示,其余的都可以删除

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 win源码编译-[Windows] windows环境下编译Nginx https://www.wkzy.net/game/154166.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务