Windows10下编译Nginx源码
Windows10 + VS2017 + Nginx-1.20.2源碼 + nginx-http-flv-module-master編譯出Windows版本的Nginx
- 背景
- 環(huán)境準備
- 源碼準備
- 1、下載nginx-1.20.2-code.tar.gz
- 2、下載nginx-http-flv-module-master.zip
- 3、下載openssl-1.1.1l.tar.gz
- 4、下載pcre-8.44.zip
- 5、下載zlib-1.2.11.tar.gz
- 編譯準備
- 開始編譯
- 1、Makefile生成
- 2、編譯nginx源碼
- 編譯完成后續(xù)
- 部署
- 工具和源碼下載
背景
因為之前使用的帶有http-flv模塊的Nginx版本是直接從網(wǎng)上下載別人編譯好的,原因是一直編譯不過去Windows版本的Nginx,所以使用人家編譯好的,就懶得再研究,但是Nginx近期一直被項目掃描出有漏洞,不得不編譯出一個新的出來,編譯期間太多曲折,所以記錄下,方便以后回顧。
環(huán)境準備
1、準備一臺Windows10的電腦;
2、安裝VS2017,記得選擇安裝社區(qū)版的vs_Community_2017.exe;
3、安裝ActivePerl,我這邊使用的版本是ActivePerl-5.28.msi,這是為了編譯OpenSSL準備的;
4、安裝msys2,我這邊使用的版本是msys2-x86_64-20211130.exe;
5、安裝sed-4.2.1-setup.exe。
安裝的過程就不多做講解了,需要注意的是,安裝完后,要確保安裝目錄都有加入到系統(tǒng)環(huán)境變量里面。
源碼準備
1、下載nginx-1.20.2-code.tar.gz
注意:Nginx源碼一定要到這個地址http://hg.nginx.org/nginx,不能到這個地址下載http://nginx.org/en/download.html,我就是因為從這里下載的源碼沒有WIN32的部分了,所以一直編譯出問題。
我下載的是下圖這個版本的,當前最新最穩(wěn)定的版本,你們也可以根據(jù)需要下載其他版本。我們點擊nginx-1.20.2-RELEASE進去下載。
2、下載nginx-http-flv-module-master.zip
我這邊使用的是未央千城所維護的http-flv模塊的源碼,可以進入他的GitHub進行下載,直接下載zip即可。
3、下載openssl-1.1.1l.tar.gz
我選擇的OpenSSL版本是openssl-1.1.1l,原因是,我在下載Nginx源碼的時候,看到nginx-1.20.2之前基于Windows編譯的有更新了OpenSSL版本,我看到里面的版本是openssl-1.1.1l,所以選擇此版本(底下的pcre和zlib也同理)。但是網(wǎng)上也有人說openssl-1.1.1的版本會導致nginx編譯不過,后面會有說如何解決。
4、下載pcre-8.44.zip
pcre我用的版本是pcre-8.44。
5、下載zlib-1.2.11.tar.gz
zlib我用的版本是zlib-1.2.11。
編譯準備
解壓nginx-1.20.2-code.tar.gz,并把文件夾重命名成nginx-1.20.2-code(強迫癥行為)。
進入nginx-1.20.2-code目錄,創(chuàng)建objs/lib,并把依賴的四個源碼壓縮包拷進去分別進行解壓,如下圖。
開始編譯
1、Makefile生成
打開MSYS,進入到nginx-1.20.2源碼目錄。
執(zhí)行configure進行Makefile文件的生成,可以使用如下命令:
注意:我這邊是有加入–with-http_auth_request_module,可以根據(jù)需要是否添加此模塊;還有我這邊的–prefix= 是沒有帶路徑的,因為帶了路徑后面就得把conf、logs、temp等文件夾拷貝進去這個路徑,不然會運行出錯。
開始生成Makefile,需要等到一段時間,直到出現(xiàn)如下畫面,證明已經(jīng)成功,可以在源碼目錄和objs目錄下看到有Makefile生成。
2、編譯nginx源碼
打開VS2017的命令行工具,進入到nginx源碼目錄,執(zhí)行nmake:
這時候你就會遇到出錯了。
1、如果遇到這樣的報錯:Can’t locate Win32/Console.pm in @INC,找到C:\Perl64\site\lib\ActivePerl目錄下的Config.pm,打開文件,注釋掉如下的代碼后保存文件。
2、解決openssl部分編譯不過的坑
打開D:\nginx\nginx-1.20.2-code\auto\lib\openssl目錄下的makefile.msvc文件,修改如下部分:
3、修改Makefile
修改D:\nginx\nginx-1.20.2-code\objs\Makefile中的CFLAGS字段,去掉-W4 -WX的編譯選項,添加-W3的編譯選項
重新執(zhí)行nmake編譯
執(zhí)行完上面的全部操作后,再回到VS2017命令行執(zhí)行nmake就會開始編譯,大概需要等十幾分鐘才會編譯完成。編譯成功的調試如下:
此時再回到objs目錄下,會看到nginx.exe就是我們編譯出來的。
編譯完成后續(xù)
編譯完成后,我們再去nginx官網(wǎng)下載一個Windows版本的nginx-1.20.2的程序。
解壓下載下來的nginx-1.20.2.zip,把我們編譯的nginx.exe替換進去,然后找到D:\nginx\nginx-1.20.2-code\objs\lib\nginx-http-flv-module-master\test下的nginx.conf替換到D:\nginx\nginx-1.20.2\conf目錄下。打開cmd進行測試,執(zhí)行nginx.exe -t 命令,出現(xiàn)如下調試證明編譯出來的Windows版本的nginx可用。
部署
至此,我們就可以和FFmpeg進行一些rtmp推流和http-flv拉流的部署操作,我的其他博客有講解這方面的內容,不再詳解。
工具和源碼下載
全套編譯工具和源碼:download
直接編譯好可用的nginx:nginx-1.20.2
總結
以上是生活随笔為你收集整理的Windows10下编译Nginx源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: echarts中geoCoordMap世
- 下一篇: java信息管理系统总结_java实现科