windows系统编译nginx和添加模块http_gzip_static_module
2022/1/11 7:03:55
本文主要是介绍windows系统编译nginx和添加模块http_gzip_static_module,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考地址:
http://nginx.org/en/docs/howto_build_on_win32.html
https://www.cnblogs.com/iamyuxing/p/10883626.html
我在git上传了已经编译好的带有:http_gzip_static_module模块的1.20.2版本,需要的可以自取,需要集成其它模块的,也可以拿下代码之后自行按文章内容进行重新编译。
https://gitee.com/lingyangcj/nginx-1.20.2-build-windows
当前目录下的压缩文件 nginx-1.20.2(编译后的文件).zip
准备工作
要在 Microsoft Win32平台上构建 nginx,您需要:
- Microsoft Visual C 编译器。因为需要用到nmake,所以勾选了使用C++的桌面开发。
- MSYS或 MSYS2。
- Perl,如果您想构建具有 SSL 支持的OpenSSL ®和 nginx。例如ActivePerl 或Strawberry Perl。
- Mercurial客户端。
- PCRE、zlib 和OpenSSL库源。
构建步骤
下载源码
需要Mercurial客户端: https://www.mercurial-scm.org/release/tortoisehg/windows/tortoisehg-6.0.0-x64.msi hg clone http://hg.nginx.org/nginx
下载解压Nginx所依赖的库
https://www.openssl.org/source/openssl-1.1.1m.tar.gz
http://zlib.net/zlib-1.2.11.tar.gz
https://udomain.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.zip
Openssl:实现安全套接字ssl功能
Pcre:实现正则表达式解析
Zlib:实现gzip压缩解压缩功能
安装Perl解释器,主要为了解析openssl中的脚本
https://strawberryperl.com/download/5.32.1.1/strawberry-perl-5.32.1.1-32bit.msi
在源码根目录下新建一个objs目录,在objs目录下新建lib文件夹,将解压好的openssl、pcre、zlib拷贝到lib目录下
mkdir objs mkdir objs/lib cd objs/lib tar -xzf ../../pcre-8.44.tar.gz tar -xzf ../../zlib-1.2.11.tar.gz tar -xzf ../../openssl-1.1.1l.tar.gz
下载安装MSYS2(模拟unix环境)
https://github.com/msys2/msys2-installer/releases/download/2021-11-30/msys2-x86_64-20211130.exe
生成Makefile之前先将源码的auto\cc目录的msvc文件做如下修改:
- 将83行的优化选项设置为-W3
- 将117和119行注释掉(因为我用的VS2019,版本较高,需要注释掉,不然会报异常)
打开MSYS2,并切换到Nginx源码包的解压目录下(根目录)
cd /H/Work/company_work_space/scmp-project/nginx-1.20.2
执行以下命令,注意configure文件的位置在根目录还是auto下(根目录可以剪切到auto下使用下方的命令) ,注意修改pcre和zlib和openssl的路径是否对应,
with-http_gzip_static_module是我环境需要gzip模块额外加上的,默认模块不包括这个。可以通过在这里添加模块实现nginx 的自定义模块。
auto/configure \ --with-cc=cl \ --with-debug \ --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.2.11 \ --with-openssl=objs/lib/openssl-1.1.1m \ --with-openssl-opt=no-asm \ --with-http_ssl_module \ --with-http_gzip_static_module
上述命令是生成可以通过VS的nmake编译的Makefile
编译整个过程是这样(此过程发生在MSYS2命令行内):
Administrator@WIN-7ECCVP09AEC MSYS /H/Work/company_work_space/scmp-project/nginx-1.20.2 # auto/configure \ --with-cc=cl \ --with-debug \ --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.2.11 \ --with-openssl=objs/lib/openssl-1.1.1m \ --with-openssl-opt=no-asm \ --with-http_ssl_module \ --with-http_gzip_static_module checking for OS + MSYS_NT-10.0-17763 3.2.0-340.x86_64 x86_64 + using Microsoft Visual C++ compiler + cl version: checking for MSYS_NT-10.0-17763 specific features creating objs/Makefile Configuration summary + using PCRE library: objs/lib/pcre-8.45 + using OpenSSL library: objs/lib/openssl-1.1.1m + using zlib library: objs/lib/zlib-1.2.11 nginx path prefix: "" nginx binary file: "/nginx.exe" nginx modules path: "/modules" nginx configuration prefix: "/conf" nginx configuration file: "/conf/nginx.conf" nginx pid file: "/logs/nginx.pid" nginx error log file: "/logs/error.log" nginx http access log file: "/logs/access.log" nginx http client request body temporary files: "temp/client_body_temp" nginx http proxy temporary files: "temp/proxy_temp" nginx http fastcgi temporary files: "temp/fastcgi_temp" nginx http uwsgi temporary files: "temp/uwsgi_temp" nginx http scgi temporary files: "temp/scgi_temp"
看到ngin xxx 很多行,至此,可以关闭MSYS2了。此时源码根目录下生成一个Makefile文件,objs文件夹下生成一些Makefile和编译要用到的头文件
运行制作
1.运行VS命令行x86 Native Tools Command Prompt for VS 2022(Visual Studio 2022社区版) 2.切换到Nginx根目录 cd H:\Work\company_work_space\scmp-project\nginx-1.20.2 3.执行以下命令:nmake -f objs/Makefile 4.用VS的nmake进行编译后会在在objs目录下生成exe文件 5.新建一个nginx的文件夹,在源码中的conf,contrib,html拷贝过来,将objs目录中生成的nginx.exe放进来,再新建logs和temp文件夹,就完成了nginx for windows的工作。
Nginx build for windows总结:
1.Nginx是32位的软件,所以最好使用32位的MSYS2和VS的32位命令行编译
2.如果要在64位上编译,需要修改openssl中生成的Makefile文件
3.Openssl1.1以上的版本需要将Makefile中的 VC-WIN32 改成 VC-WIN64A
4.Openssl1.0的版本需要更改INSTALL.W64文件文件找到To build for Win64/x64,用perl执行那几行脚本。
这篇关于windows系统编译nginx和添加模块http_gzip_static_module的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-13用Nginx防范DDoS攻击的那些事儿
- 2024-12-13用Terraform在AWS上搭建简单NGINX服务器指南
- 2024-10-29Nginx发布学习:从入门到实践的简单教程
- 2024-10-28Nginx发布:新手入门教程
- 2024-10-21nginx 怎么设置文件上传最大20M限制-icode9专业技术文章分享
- 2024-10-17关闭 nginx的命令是什么?-icode9专业技术文章分享
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享