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,最后显示如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)