天天看點

《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include

可以看出,configure指令至關重要,下文将詳細介紹如何使用configure指令,并分析configure到底是如何工作的,從中我們也可以看出nginx的一些設計思想。

使用help指令可以檢視configure包含的參數。

這裡不一一列出help的結果,隻是把它的參數分為了四大類型,下面将會詳述各類型下所有參數的用法和意義。

路徑相關的參數

表1-2列出了nginx在編譯期、運作期中與路徑相關的各種參數。

《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include
《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include

編譯相關的參數

表1-3列出了編譯nginx時與編譯器相關的參數。

《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include

依賴軟體的相關參數

表1-4~表1-8列出了nginx依賴的常用軟體支援的參數。

《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include
《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include
《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include

子產品相關的參數

除了少量核心代碼外,nginx完全是由各種功能子產品組成的。這些子產品會根據配置參數決定自己的行為,是以,正确地使用各個子產品非常關鍵。在configure的參數中,我們把它們分為五大類。

事件子產品。

預設即編譯進入nginx的http子產品。

預設不會編譯進入nginx的http子產品。

郵件代理伺服器相關的mail 子產品。

其他子產品。

(1)事件子產品

表1-9中列出了nginx可以選擇哪些事件子產品編譯到産品中。

《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include

(2)預設即編譯進入nginx的http子產品

表1-10列出了預設就會編譯進nginx的核心http子產品,以及如何把這些http子產品從産品中去除。

《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include
《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include
《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include

(3)預設不會編譯進入nginx的http子產品

表1-11列出了預設不會編譯至nginx中的http子產品以及把它們加入産品中的方法。

《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include
《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include

(4)郵件代理伺服器相關的mail子產品

表1-12列出了把郵件子產品編譯到産品中的參數。

《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include

5.其他參數

configure還接收一些其他參數,表1-13中列出了相關參數的說明。

《深入了解Nginx:子產品開發與架構解析》一1.5 configure詳解include include

我們看到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

| |---mail

| |---misc

|---makefile

ngx_module_t *ngx_modules[] = {

};