可以看出,configure指令至關重要,下文将詳細介紹如何使用configure指令,并分析configure到底是如何工作的,從中我們也可以看出nginx的一些設計思想。
使用help指令可以檢視configure包含的參數。
這裡不一一列出help的結果,隻是把它的參數分為了四大類型,下面将會詳述各類型下所有參數的用法和意義。
路徑相關的參數
表1-2列出了nginx在編譯期、運作期中與路徑相關的各種參數。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLkNjY3U2MlhDZ3YzMxEjMlZGZ0UjN4QzNmNDZ5kzYmVDN0YjY3UzMk9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
編譯相關的參數
表1-3列出了編譯nginx時與編譯器相關的參數。
依賴軟體的相關參數
表1-4~表1-8列出了nginx依賴的常用軟體支援的參數。
子產品相關的參數
除了少量核心代碼外,nginx完全是由各種功能子產品組成的。這些子產品會根據配置參數決定自己的行為,是以,正确地使用各個子產品非常關鍵。在configure的參數中,我們把它們分為五大類。
事件子產品。
預設即編譯進入nginx的http子產品。
預設不會編譯進入nginx的http子產品。
郵件代理伺服器相關的mail 子產品。
其他子產品。
(1)事件子產品
表1-9中列出了nginx可以選擇哪些事件子產品編譯到産品中。
(2)預設即編譯進入nginx的http子產品
表1-10列出了預設就會編譯進nginx的核心http子產品,以及如何把這些http子產品從産品中去除。
(3)預設不會編譯進入nginx的http子產品
表1-11列出了預設不會編譯至nginx中的http子產品以及把它們加入産品中的方法。
(4)郵件代理伺服器相關的mail子產品
表1-12列出了把郵件子產品編譯到産品中的參數。
5.其他參數
configure還接收一些其他參數,表1-13中列出了相關參數的說明。
我們看到configure指令支援非常多的參數,讀者可能會好奇它在執行時到底做了哪些事情,本節将通過解析configure源碼來對它有一個感性的認識。configure由shell腳本編寫,中間會調用/auto/目錄下的腳本。這裡将隻對configure腳本本身做分析,對于它所調用的auto目錄下的其他工具腳本則隻做功能性的說明。
configure腳本的内容如下:
最核心的構造運作期modules的腳本。它将會生成ngx_modules.c檔案,這個檔案會被編譯進nginx中,其中它所做的唯一的事情就是定義了ngx_modules數組。ngx_modules指明nginx運作期間有哪些子產品會參與到請求的進行中,包括http請求可能會使用哪些子產品處理,是以,它對數組元素的順序非常敏感,也就是說,絕大部分子產品在ngx_modules數組中的順序其實是固定的。例如,一個請求必須先執行ngx_http_gzip_filter_module子產品重新修改http響應中的頭部後,才能使用ngx_http_header_filter子產品按照headers_in結構體裡的成員構造出以tcp流形式發送給用戶端的http響應頭部。注意,我們在--add-module=參數裡加入的第三方子產品也在此步驟寫入到ngx_modules.c檔案中了
. auto/modules
處理nginx安裝後的路徑
case ".$ngx_prefix" in
esac
|---ngx_auto_headers.h
|---autoconf.err
|---ngx_auto_config.h
|---ngx_modules.c
|---src
| |---core
| |---event
| | |---modules
| |---os
| | |---unix
| | |---win32
| |---http
| | | |---perl
| |---misc
|---makefile
…
ngx_module_t *ngx_modules[] = {
};