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文件,修改以下變量
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;
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,最后顯示如下: