天天看點

[Windows] windows環境下編譯Nginx前言:準備工作:編譯及部署:

前言:

官方的編譯步驟為:http://nginx.org/en/docs/howto_build_on_win32.html

但是按照其推薦步驟進行的話并不是很順利,有很多坑,這裡幾種記錄一下,同時總結一個完全可靠的方案流程。

準備工作:

1. windows下的c語言編譯器

windows下的c語言編譯器可以通過安裝vs的方式擷取,安裝完成後會在相應的bin目錄下(安裝完vs即可)。

2. Linux模拟工作環境 MSYS

msys是一個模拟環境,其中包含了90多個linux通用指令,讓我們可以在windows系統上運作linux指令,可以了解為是一個linux環境下各種工具的跨平台windows版本合集。這也是為什麼我們可以在windows平台上使用configure工具的依據。

下載下傳路徑:https://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.11/MSYS-1.0.11.exe/download?use_mirror=nchc

注意:這裡隻需要MSYS即可,因為在最終編譯時使用的是nmake,而不是linux的make,是以不需要安裝mingw,那太龐大了,也用不到。

3. 工程配置腳本工具 Perl

建議使用5.30以上版本,本人在使用時發現28的版本好像在配置openssl的時候有問題。

下載下傳路徑:http://strawberryperl.com/

ps:ActivePerl 和 Strawberry Perl 都可以

4. 使用 Mercurial 擷取Nginx源代碼

這是一個代碼管理倉庫的配套工具,等同于使用git工具從github上下載下傳代碼。

下載下傳路徑:https://www.mercurial-scm.org/

這裡不推薦使用這個工具下載下傳Nginx源代碼,因為國内的網絡似乎不可用,總會有各種問題,是以可以從官網直接下代碼來進行編譯。

[Windows] windows環境下編譯Nginx前言:準備工作:編譯及部署:

紅框中的是源碼,後面的那個是windows編譯釋出版本,我們想自己編,是以不适用他的釋出版。

有時候這個源碼對外釋出也會出現 “缺斤少兩” 的問題,建議一個編譯不過可以多下幾個,或者到 http://hg.nginx.org/nginx/ 中去找源碼下載下傳。

5. 準備Nginx的依賴庫

Nginx 的某些主要功能弱依賴于個别第三方庫: zlib、openssl、pcre 。這其中openssl建議使用 1.0.x的版本,本人在編譯1.1.x的時候遇到一些奇怪問題,最後也沒有去研究為什麼(畢竟隻是為了可以用)。

zlib 下載下傳路徑 : www.zlib.net

pcre 下載下傳路徑: www.pcre.org

openssl下載下傳路徑 :www.openssl.org

ps:下載下傳源碼後不需要自己去編譯這些工程,隻需要解壓好即可,後面Nginx會帶着他們一起編譯(這點很友善)。

把下載下傳的包解壓,然後在源碼路徑下建立objs/lib/目錄,然後解壓到其中:

[Windows] windows環境下編譯Nginx前言:準備工作:編譯及部署:

6. Nginx源碼需要進行的調整

找到/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;
           

64位編譯修改(32位編譯忽略)

打開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”。

7. 工程配置Configure

以上步驟完成以後便可以進行編譯工程的配置了。通用模闆如下:

auto/configure --with-cc=cl --builddir=objs --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 \
--with-zlib=objs/lib/zlib \
--with-openssl=objs/lib/openssl \
--with-select_module --with-http_ssl_module
           

注:其中的 -with-zlib 、 -with-openssl 、-with-pcre 這三個配置的值需要指定到源碼路徑。

這裡也使用了官方文檔推薦的目錄結構,即在Nginx源碼根目錄下建立objs檔案夾,然後把這三個依賴庫都放到 objs/lib/ 路徑下。

上述指令執行完畢,便會生成Makefile了。

編譯及部署:

1. 編譯

編譯時需要注意,nmake依賴windows開發環境變量,是以不能使用普通的cmd指令行運作nmake,而要使用vs提供的包含開發環境的指令行。

[Windows] windows環境下編譯Nginx前言:準備工作:編譯及部署:

打開後,切換到Nginx源碼根路徑,執行:

nmake -f objs/Makefile
           

接下來等待編譯成功即可。

2.部署

a) 把objs\nginx.exe拷貝到上一級目錄

b) 建立檔案夾logs、temp、html

3.删除多餘檔案

nginx目錄下可删剩下圖所示

[Windows] windows環境下編譯Nginx前言:準備工作:編譯及部署:

繼續閱讀