Windows編譯nginx


windows下利用MSYS2和VS的nmake編譯nginx源碼

前寫小論文的時候已經在Linux上部署好了Nginx的環境,在Linux上的安裝比較簡單,可以有兩種方式:

1. 添加yum源,然后yum install nginx (CentOS),ubuntu上 sudo apt-get install nginx

2. 下載好nginx的源碼,

  auto/configure

  make

  make install

這周開始准備大論文嘗試在Windows上通過源碼編譯nginx,不斷試錯,總算實現了在Windows上通過源碼編譯出了nginx.exe

網上找資料需要MinGW+MSYS,這兩個我下載不下來,於是考慮了Cygwin,也試過了MSYS2,最終在我的電腦上得到了想要的結果。如果各位同學有同樣的需求的話可以參考一下。

安裝需要:openssl;pcre;zlib;這三個nginx依賴的庫可自行網上下載,我最后用的是在GitHub上找的一篇參考文獻中的,鏈接:https://github.com/tjliupeng/nginx-build-windows 

Perl解釋器,我用的是ActivePerl;

MYSY2,nginx是32位的,所以最好用32位的,我用的是清華大學鏡像站下的20150916版本32位:https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/i686/

另外沒有安裝VS的可能需要安裝一下VS,因為需要用到nmake

下面先列出編譯過程,在最后總結可能的出錯原因。

1.下載解壓Nginx所依賴的庫

Openssl:實現安全套接字ssl功能

Pcre:實現正則表達式解析

Zlib:實現gzip壓縮解壓縮功能

2. 安裝Perl解釋器,主要為了解析openssl中的腳本

 

3.下載好Nginx的源碼包

在Nginx官網下載ngixn的源碼包

http://hg.nginx.org/nginx 或者 http://nginx.org/en/download.html

然后,解壓。

在源碼根目錄下新建一個objs目錄,在objs目錄下新建lib文件夾,將解壓好的openssl、pcre、zlib拷貝到lib目錄下

 

 

4.下載安裝MSYS2(模擬unix環境)

生成Makefile之前先將源碼的auto\cc目錄的msvc文件做如下修改:

  1. 將83行的優化選項設置為-W3
  2. 將117和119行注釋掉(因為我用的VS2019,版本較高,需要注釋掉,不然會報異常)

切換到Nginx源碼包的解壓目錄下(根目錄)

執行以下命令(這一段腳本我在最后列出,可直接復制):

 

上述命令是生成可以通過VS的nmake編譯的Makefile

編譯后是這樣:

 

至此,可以關閉MSYS2了。(沒有用到gcc,只是下載一個msys2來執行configure腳本,因為之前找資料是MinGW+MSYS,所以最后還試過MSYS2通過pacman命令安裝gcc,make,最后發現好像沒用到gcc,重裝了好幾次MSYS2了,最后選擇的20150916版本的32位)

此時源碼根目錄下生成一個Makefile文件,objs文件夾下生成一些Makefile和編譯要用到的頭文件

 

5.打開VS的命令行

 

 

選擇32位下的命令行

或者通過cmd命令行打開vc子目錄下的vcvars32.bat(網上的教程里面列出的的絕對路徑和vs2017、vs2019有點出入,可自行找找

我的vs2019路徑是C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build)

 

切換到源碼根目錄 nmake –f objs/Makefile

用VS的nmake進行編譯就可以在objs目錄下生成exe文件

在我的機器上大概兩三分鍾編譯完如下所示:

 

此時,在objs目錄下生成了nginx.exe文件

 

 

6. Nginx的發布

新建一個nginx的文件夾,在源碼中的conf,contrib,html拷貝過來,將objs目錄中生成的nginx.exe放進來,再新建logs和temp文件夾,就完成了nginx for windows的工作。

 

整個文件夾體積也比較小,不到4MB,雙擊nginx.exe,就能運行nginx了,我們可以在瀏覽器中訪問http://localhost:80 (nginx默認監聽80端口)

 

 

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執行那幾行腳本。

官方給出的nginx build for nginx 的文檔:

http://nginx.org/en/docs/howto_build_on_win32.html#build_steps

在MSYS2中執行的腳本代碼,如果下載的nginx的源碼里面configure文件在根目錄,則第一行位./configure \  ,下面指定cl編譯器,以及logs和temp的目錄等。

auto/configure \
--with-cc=cl \
--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.40 \
--with-zlib=objs/lib/zlib-1.2.11 \
--with-openssl=objs/lib/openssl \
--with-openssl-opt=no-asm \
--with-select_module  \
--with-http_ssl_module \
--with-http_sub_module \
--with-openssl-opt=no-asm

 

另外附上一個GitHub上的可以直接在VS上調試nginx的鏈接:https://github.com/tumtumtum/nginx-visualstudio
下載后,需要將root目錄改為conf
然后可以在config目錄下的ngx_auto_config.h文件中根據需要更改“*_temp”的路徑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM