Nginx學習筆記(一):Configure命令詳解

前言

? ? ? ?一直打算深入學習一下開源項目喧伞,這一個月來的任務西饵,對于修改IPMI開源軟件也確實增長了對于開源項目的認識插掂,期間碰到與解決的問題也讓我收獲不小问潭。這一塊可以說是為我學習Nginx開了個好頭找蜜。

? ? ? ?為什么學習Nginx饼暑?當然是隨主流,畢竟群眾的眼睛是雪亮的」眩基本上彰居,我能搜到的被推薦的開源項目,Nginx基本都在推薦之列撰筷。不猶豫陈惰,就是它了。

Configure詳解

? ? ? ?在編譯安裝Nginx時闭专,我們需要使用configure命令做大量"幕后“工作奴潘,包括檢測操作系統(tǒng)內(nèi)核和已經(jīng)安裝的軟件,參數(shù)解析影钉,中間目錄生成以及根據(jù)各種參數(shù)生成的.c文件画髓、Makefile文件等。

一平委、命令參數(shù)(略)

? ? ? ?Configure包含的參數(shù)使用以下命令查看:

? ? ? ?./configure --help

? ? ? ?主要分為五大類:1奈虾,路徑相關;2廉赔,編譯相關肉微;3,依賴軟件相關蜡塌;4碉纳,模塊相關;5馏艾,其他劳曹;

二、Configrue執(zhí)行流程

? ? ? ? Configure本身是一個Shell腳本琅摩,中間會調(diào)用<nginx-source-path>/auto/目錄下別的腳本執(zhí)行铁孵。其內(nèi)容如下:

#!/bin/sh

# Copyright (C) Igor Sysoev

# Copyright (C) Nginx, Inc.

# 設置環(huán)境變量。這里是為了去除所有本地化設置房资,讓命令正確執(zhí)行

LC_ALL=C

export LC_ALL

# 處理configure命令的參數(shù)蜕劝。options腳本將會定義后續(xù)工作將會用到的變量,之后進行相應設置轰异。

. auto/options

# 初始化后續(xù)產(chǎn)生的文件路徑岖沛。比如Makefile,默認情況下<nginx-source-path>/objs/

. auto/init

# 分析nginx源碼結(jié)構(gòu)搭独,構(gòu)造后續(xù)的Makefile文件

. auto/sources

# 編譯過程中所有生成目標文件存放的文件夾

test -d $NGX_OBJS || mkdir $NGX_OBJS

# 建立ngx_auto_hearder.h烫止、autoconf.err等必要的編譯文件

echo > $NGX_AUTO_HEADERS_H

echo > $NGX_AUTOCONF_ERR

# 向ngx_auto_config.h文件寫入命令行帶的參數(shù)

echo "#define NGX_CONFIGURE \"$NGX_CONFIGURE\"" > $NGX_AUTO_CONFIG_H

# 判斷DEBUG標志,如果有戳稽,則在ngx_auto_config.h中寫入DEBUG宏

if [ $NGX_DEBUG = YES ]; then

? ? have=NGX_DEBUG . auto/have

fi

# 開始檢查操作系統(tǒng)參數(shù)是否支持后續(xù)編譯

if test -z "$NGX_PLATFORM"; then

? ? echo "checking for OS"

? ? NGX_SYSTEM=`uname -s 2>/dev/null`

? ? NGX_RELEASE=`uname -r 2>/dev/null`

? ? NGX_MACHINE=`uname -m 2>/dev/null`

# 輸出操作系統(tǒng)名稱馆蠕、內(nèi)核版本期升、32/64內(nèi)核

? ? echo " + $NGX_SYSTEM $NGX_RELEASE $NGX_MACHINE"

? ? NGX_PLATFORM="$NGX_SYSTEM:$NGX_RELEASE:$NGX_MACHINE";

? ? case "$NGX_SYSTEM" in

? ? ? ? MINGW32_*)

? ? ? ? ? ? NGX_PLATFORM=win32

? ? ? ? ;;

? ? esac

else

? ? echo "building for $NGX_PLATFORM"

? ? NGX_SYSTEM=$NGX_PLATFORM

fi

# 檢查并設置編譯器,如gcc時候安裝互躬,gcc版本時候支持后續(xù)編譯nginx

. auto/cc/conf

# 對于非Windows系統(tǒng)定義一些必要頭文件播赁,并檢查其是否存在,以此決定configure后續(xù)步驟是否可執(zhí)行吼渡。

# 注: 檢查某頭文件是否存在或者某特性的類似操作容为,這里都是通過生成一個最簡單的main函數(shù)C程序,該程序包含響應的頭文件寺酪,然后編譯檢查其是否通過坎背。具體的結(jié)果記錄在autoconf.err文件中。

if [ "$NGX_PLATFORM" != win32 ]; then

? ? . auto/headers

fi

# 對于當前操作系統(tǒng)寄雀,定義特定的操作系統(tǒng)相關方法并檢查當前環(huán)境是否支持得滤。比如對于linux,設置進程優(yōu)先級盒犹,使用sendfile系統(tǒng)調(diào)用

. auto/os/conf

# 定義類UNIX操作系統(tǒng)的頭文件和系統(tǒng)調(diào)用等懂更,并檢查當前環(huán)境是否支持

if [ "$NGX_PLATFORM" != win32 ]; then

? ? . auto/unix

fi

# !<卑颉沮协!重要!W可慷暂!

# 生成ngx_modules.c文件,此文件會被編譯進nginx晨雳,它唯一定義ngx_modules數(shù)組行瑞。此數(shù)組指明nginx運行期間有哪些模塊會參與到請求處理中。數(shù)組中的順序就是模塊優(yōu)先級的順序悍募。?

. auto/modules

# 檢查nginx在鏈接期間需要連接的第三方靜態(tài)庫、動態(tài)庫或目標文件是否存在

. auto/lib/conf

# 處理nginx安裝后的路徑

case ".$NGX_PREFIX" in

? ? .)

? ? ? ? NGX_PREFIX=${NGX_PREFIX:-/usr/local/nginx}

? ? ? ? have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define

? ? ;;

? ? .!)

? ? ? ? NGX_PREFIX=

? ? ;;

? ? *)

? ? ? ? have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define

? ? ;;

esac

# 處理nginx安裝后conf文件的路徑

if [ ".$NGX_CONF_PREFIX" != "." ]; then

? ? have=NGX_CONF_PREFIX value="\"$NGX_CONF_PREFIX/\"" . auto/define

fi

# 處理nginx安裝后洋机,二進制文件坠宴、pid、lock等其他文件路徑

have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define

have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define

have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define

have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define

have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define

have=NGX_HTTP_LOG_PATH value="\"$NGX_HTTP_LOG_PATH\"" . auto/define

have=NGX_HTTP_CLIENT_TEMP_PATH value="\"$NGX_HTTP_CLIENT_TEMP_PATH\""

. auto/define

have=NGX_HTTP_PROXY_TEMP_PATH value="\"$NGX_HTTP_PROXY_TEMP_PATH\""

. auto/define

have=NGX_HTTP_FASTCGI_TEMP_PATH value="\"$NGX_HTTP_FASTCGI_TEMP_PATH\""

. auto/define

have=NGX_HTTP_UWSGI_TEMP_PATH value="\"$NGX_HTTP_UWSGI_TEMP_PATH\""

. auto/define

have=NGX_HTTP_SCGI_TEMP_PATH value="\"$NGX_HTTP_SCGI_TEMP_PATH\""

. auto/define

# 創(chuàng)建編譯時使用的Makefile文件

. auto/make

# 為Makefile加入需要鏈接的第三方靜態(tài)庫绷旗、動態(tài)庫或者目標文件

. auto/lib/make

# 為Makefile加入install功能

. auto/install

# STUB 在ngx_auto_config.h中加入NGX_SUPPRESS_WARN喜鼓、NGX_SMP宏

. auto/stubs

# 在ngx_auto_config.h文件指定NGX_USER和NGX_GROUP宏,如果執(zhí)行configure時無指定參數(shù)衔肢,則默認nobody庄岖,即默認以nobody用戶運行進程

have=NGX_USER value="\"$NGX_USER\"" . auto/define

have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/define

# 顯示configure執(zhí)行結(jié)果

. auto/summary

三、Configure生成文件

? ? ? ? Configure執(zhí)行成功會生成objs目錄角骤,如下圖:

? ? ? ?重點在ngx_modeles.c文件隅忿,其中定義了ngx_modules數(shù)組心剥,它指明每個模塊在Nginx中的優(yōu)先級。當一個請求同時符合多個模塊處理規(guī)則時背桐,將按照此數(shù)組中的順序選擇最靠前的模塊優(yōu)先處理优烧。

總結(jié)

? ? ? ?Configurex所做工作:尋找Nginx所依賴軟件,針對不同操作系統(tǒng)做的優(yōu)化链峭,生成Makefile畦娄,ngx_XXX.h文件,ngx_modules.c文件弊仪。其中熙卡,ngx_modules.c文件決定運行時所有模塊的優(yōu)先級。對于不需要的模塊励饵,即不會加入ngx_modules數(shù)組驳癌,也就不會編進Nginx中,體現(xiàn)了其輕量級概念曲横。

主要參考:

《深入理解Nginx》

---------------------

作者:時間文盲

來源:CSDN

原文:https://blog.csdn.net/fzy0201/article/details/17683883

版權(quán)聲明:本文為博主原創(chuàng)文章喂柒,轉(zhuǎn)載請附上博文鏈接!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末禾嫉,一起剝皮案震驚了整個濱河市灾杰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌熙参,老刑警劉巖艳吠,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異孽椰,居然都是意外死亡昭娩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門黍匾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栏渺,“玉大人,你說我怎么就攤上這事锐涯】恼铮” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵纹腌,是天一觀的道長霎终。 經(jīng)常有香客問我,道長升薯,這世上最難降的妖魔是什么莱褒? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮涎劈,結(jié)果婚禮上广凸,老公的妹妹穿的比我還像新娘阅茶。我一直安慰自己,他們只是感情好炮障,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布目派。 她就那樣靜靜地躺著,像睡著了一般胁赢。 火紅的嫁衣襯著肌膚如雪企蹭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天智末,我揣著相機與錄音谅摄,去河邊找鬼。 笑死系馆,一個胖子當著我的面吹牛送漠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播由蘑,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼闽寡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了尼酿?” 一聲冷哼從身側(cè)響起爷狈,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎裳擎,沒想到半個月后涎永,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鹿响,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年羡微,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惶我。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡妈倔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绸贡,到底是詐尸還是另有隱情盯蝴,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布恃轩,位于F島的核電站结洼,受9級特大地震影響黎做,放射性物質(zhì)發(fā)生泄漏叉跛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一蒸殿、第九天 我趴在偏房一處隱蔽的房頂上張望筷厘。 院中可真熱鬧鸣峭,春花似錦、人聲如沸酥艳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽充石。三九已至莫换,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骤铃,已是汗流浹背拉岁。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惰爬,地道東北人喊暖。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像撕瞧,于是被迫代替她去往敵國和親陵叽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容