Ngnix+vs2022+windows 10 环境下编译

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。【来至百度百科】

最近工作中,用到nginx做反向代理。由于各方面的原因,我们的部署环境是windows server 2019服务器上。Nginx windows版本的安装包,该版本没有包含我们需要的健康检查功能模块。查看官网,发现健康检查模块是属于商业的部分。因此,希望通过编译Nginx 源码添加第三方开源的模块,达到需求。故有本文。本文作为一个学习的记录,在windows 10+vs 2022的环境下编译Nginx源码。

一、准备工作

1、下载VS2022 (https://visualstudio.microsoft.com/zh-hans/vs/)--编译环境

安装的时候需要把C++环境选上。

 

 

安装完成后,在开始菜单会发现vs2022下面有这么些应用

 

 

 

2、下载MSYS2 (https://www.msys2.org/) -- GNU环境

本文使用的包msys2-x86_64-20220319.exe

3、下载Strawberry Perl (https://strawberryperl.com/ -- 安装Perl解释器,主要为了解析openssl中的脚本

本文使用的包strawberry-perl-5.32.1.1-64bit.msi

4、下载nasm(https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/)

本文使用的包nasm-2.15.05-installer-x64.exe,安装完成后,需要把安装路径设置环境变量。

5、下载PCRE (https://github.com/PhilipHazel/pcre2/releases)--依赖库实现正则表达式解析

本文使用的包pcre2-10.39.zip

6、下载Zlib (http://zlib.net/)--依赖库实现gzip压缩解压缩功能

本文使用的包zlib1211.zip

7、下载OpenSSL (https://www.openssl.org/source/)--依赖库实现安全套接字ssl功能本文使用的包openssl-1.1.1n.tar.gz

8、下载Ngnix 源码(https://github.com/nginx/nginx)

 

二、操作步骤

1.解压nginx(路径不要出现中文,会报错)

2.nginx源码目录下,创建目录objs目录及子目录lib

3.Pcre,Zlib,OpenSSL解压到lib目录下,最终目录结构如下

 

 

4.编译配置

修改1:

编辑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”

由于Nignx没有提供相关配置项改变缺省banner,所以我们需要改变源码,然后重编译和重新安装一下, 具体操作:
找到/nginx/src/http/ngx_http_header_filter_module.c文件,修改以下变量

1
2
3
static u_char ngx_http_server_string[] = "Server: nginx" CRLF;<br>static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;<br>static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;     
 
修改为:static u_char ngx_http_server_string[] = "Server: " CRLF;<br>static u_char ngx_http_server_full_string[] = "Server:  " CRLF;<br>static u_char ngx_http_server_build_string[] = "Server: " CRLF;

5.运行MSYS2,切换到ngnix 源码路径下,执行

 

 

6.运行C++编译环境

 

 

编译完成后,在objs目录下会生成nginx.exe

 

7.打包部署

nginx.exe拷贝到新建的一个文件夹下,同时创建conf,html,logs,temp文件夹,结构如下:

 

 

html创建一个indext.html文件输出hello nginx,在配置conf目录创建nginx配置文件监听端口8080,运行nginx.exe,通过浏览器访问http://localhost:8080,最后显示如下:

 

 

 

参考文章:https://www.jianshu.com/p/9b4d41905ee6

posted @   1~Q箱子  阅读(2000)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示