出版時(shí)間:2013-5 出版社:人民郵電出版社 作者:高群凱
Tag標(biāo)簽:無
內(nèi)容概要
《深入剖析Nginx》不是一本關(guān)于Nginx配置指令如何使用的介紹手冊(cè)?!渡钊肫饰鯪ginx》重點(diǎn)在于通過剖析Nginx的源代碼,探究其功能結(jié)構(gòu)及其內(nèi)部實(shí)現(xiàn)原理。全書共14章和3個(gè)附錄。首先介紹了開始剖析Nginx源代碼前的準(zhǔn)備工作,以及跟蹤和調(diào)試的方法;然后,分別深入分析了Nginx的進(jìn)程模型、數(shù)據(jù)結(jié)構(gòu)、配置指令、主要功能模塊、I/O事件處理、變量機(jī)制、客戶端請(qǐng)求過程、Filter模塊實(shí)例、負(fù)載均衡策略以及Handler模塊等。附錄部分提供了Nginx的編譯模塊、運(yùn)行配置等有用信息。
作者簡(jiǎn)介
高群凱,重慶大學(xué)計(jì)算機(jī)學(xué)院碩士畢業(yè),接觸Linux等自由/開源軟件已有11年,在技術(shù)領(lǐng)域的興趣主要包括Linux、高性能服務(wù)(Web服務(wù)如Lighttpd、Nginx、Apache等;數(shù)據(jù)庫服務(wù)如Mongodb等),以及x86、MIPS(Cavium、RMI、Tilera)等。一直在深信服科技有限公司工作,專職從事Linux相關(guān)研究,對(duì)系統(tǒng)底層性能優(yōu)化、內(nèi)核oops宕機(jī)以及x86疑難問題排查等相關(guān)技術(shù)有一些研究和積累。曾著有《Lighttpd源碼分析》一書。個(gè)人博客:http://lenky.info/。
書籍目錄
第1章 源碼分析的準(zhǔn)備工作 1 1.1 主要特性 1 1.2 源碼下載 4 1.3 源碼目錄結(jié)構(gòu) 5 1.4 源碼分析工具 6 1.5 測(cè)試輔助工具 7 1.6 編譯與執(zhí)行 8 1.7 其他準(zhǔn)備 9 第2章 跟蹤與調(diào)試 10 2.1 利用gdb調(diào)試 10 2.1.1 綁定Nginx到gdb 10 2.1.2 gdb的watch指令 13 2.1.3 Nginx對(duì)gdb的支持 14 2.1.4 宏 16 2.1.5 cgdb 18 2.2 利用日志信息跟蹤Nginx 19 2.3 利用strace/pstack調(diào)試Nginx 21 2.4 獲得Nginx程序完整執(zhí)行流程 23 2.5 加樁調(diào)試 29 2.6 特殊應(yīng)用邏輯的調(diào)試 31 第3章 進(jìn)程模型 35 3.1 整體架構(gòu) 35 3.2 核心進(jìn)程模型 36 3.2.1 監(jiān)控進(jìn)程 36 3.2.2 工作進(jìn)程 38 3.3 Cache進(jìn)程模型 38 3.3.1 Cache管理進(jìn)程 40 3.3.2 Cache加載進(jìn)程 42 3.4 進(jìn)程通信 43 3.5 共享內(nèi)存 46 3.6 slab機(jī)制 50 3.7 信號(hào)處理 59 3.7.1 準(zhǔn)備工作 60 3.7.2 設(shè)置生效 61 3.7.3 處理實(shí)例 62 第4章 數(shù)據(jù)結(jié)構(gòu) 65 4.1 內(nèi)存池 65 4.2 Hash 72 4.3 Radixtree 77 第5章 配置解析 81 5.1 配置文件格式 81 5.2 配置項(xiàng)目解析準(zhǔn)備 84 5.3 配置文件解析流程 86 5.4 配置信息組織結(jié)構(gòu) 95 5.5 配置信息的繼承 108 第6章 模塊綜述 113 6.1 Handler模塊 116 6.2 Filter模塊 124 6.3 Upstream模塊 127 6.4 Load—balance模塊 132 第7章 事件管理機(jī)制 134 7.1 I/O多路復(fù)用模型 134 7.2 epoll模型 138 7.3 事件處理 144 7.4 負(fù)載均衡 146 7.4.1 客戶端請(qǐng)求均衡 146 7.4.2 多核綁定 152 7.5 超時(shí)管理 153 第8章 變量機(jī)制 160 8.1 初識(shí)變量 160 8.2 支撐機(jī)制 163 8.3 腳本引擎 174 8.4 執(zhí)行順序 180 第9章 請(qǐng)求處理與響應(yīng) 182 9.1 創(chuàng)建監(jiān)聽套接口 182 9.2 創(chuàng)建連接套接口 188 9.3 請(qǐng)求處理 191 9.4 數(shù)據(jù)響應(yīng) 197 9.5 子請(qǐng)求 201 9.6 連接關(guān)閉 214 9.6.1 keepalive機(jī)制 217 9.6.2 延遲關(guān)閉機(jī)制 221 第10章 請(qǐng)求定位 228 10.1 Location的生成 228 10.2 Location的整理 232 10.3 Server的定位 239 10.4 Location的定位與使用 242 10.5 未命名location的使用 244 10.6 try_files指令 248 第11章 動(dòng)態(tài)頁面請(qǐng)求處理 252 11.1 測(cè)試環(huán)境 252 11.2 客戶端發(fā)起Php請(qǐng)求 255 11.3 請(qǐng)求轉(zhuǎn)發(fā) 259 11.3.1 建立連接 261 11.3.2 發(fā)送請(qǐng)求數(shù)據(jù) 265 11.4 數(shù)據(jù)響應(yīng) 267 11.4.1 接收并處理Fastcgi響應(yīng)頭 267 11.4.2 接收并發(fā)送Fastcgi響應(yīng)體 273 第12章 過濾模塊 283 12.1 ngx_http_not_modified_filter_module 283 12.1.1 304狀態(tài)碼 283 12.1.2 412狀態(tài)碼 285 12.2 ngx_http_headers_filter_module 288 12.2.1 HTTP緩存功能的擴(kuò)展 289 12.2.2 增加自定義響應(yīng)頭 290 12.3 ngx_http_gzip_filter_module 291 12.4 ngx_http_range_filter_module 293 第13章 負(fù)載均衡 299 13.1 負(fù)載均衡策略 300 13.2 加權(quán)輪詢 301 13.2.1 準(zhǔn)備工作 301 13.2.2 選擇后端服務(wù)器 304 13.2.3 后端服務(wù)器權(quán)值計(jì)算 307 13.2.4 釋放后端服務(wù)器 307 13.3 IP哈希 310 選擇后端服務(wù)器 310 13.4 兩種策略對(duì)比 313 第14章 訪問控制 315 14.1 禁止指定IP訪問 315 14.2 密碼認(rèn)證訪問 318 14.3 其他訪問控制措施 327 14.3.1 禁止用戶通過IP地址訪問服務(wù)器 327 14.3.2 禁止對(duì)某目錄或某類文件的訪問 327 附錄A 329 附錄B 332 附錄C 333
章節(jié)摘錄
版權(quán)頁: 插圖: 對(duì)一個(gè)客戶端請(qǐng)求的處理,終于銜接到Nginx的Handler模塊來了,各個(gè)Handler模塊的處理在前面章節(jié)已經(jīng)描述過,所以這里不再多講。對(duì)于一個(gè)訪問靜態(tài)頁面的GET類型請(qǐng)求,最終會(huì)被ngx—http static—module模塊的ngX_http—static—handler()函數(shù)捕獲,該函數(shù)組織待響應(yīng)的數(shù)據(jù),然后調(diào)用ngx http—output filter()經(jīng)過Nginx過濾鏈后將數(shù)據(jù)發(fā)送到客戶端,此時(shí)一個(gè)請(qǐng)求的處理與響應(yīng)也就完成,所以當(dāng)回到ngx—http_process—request()i函數(shù)的最末,調(diào)用到函數(shù)ngX http—run posted_requests()內(nèi)時(shí),因?yàn)閏—>destroyed為真而直接退出。下一節(jié)就具體來看http數(shù)據(jù)響應(yīng)的內(nèi)部邏輯過程。 http響應(yīng)消息也分為head頭部和body主體,和請(qǐng)求消息一致,也是頭部信息先發(fā)送,然后才是主體信息。本節(jié)仍以簡(jiǎn)單的GET請(qǐng)求靜態(tài)頁面為例,來看看Nginx如何對(duì)客戶端做出數(shù)據(jù)響應(yīng)。 前面提到,簡(jiǎn)單的GET請(qǐng)求靜態(tài)頁面最終會(huì)被ngx http static module模塊實(shí)際處理,執(zhí)行的函數(shù)為ngx http static handler0。該函數(shù)首先要做的當(dāng)然是找到請(qǐng)求靜態(tài)頁面所對(duì)應(yīng)的磁盤文件,通過組合當(dāng)前l(fā)ocation配置的根目錄與GET請(qǐng)求里的絕對(duì)URl即可得到該磁盤文件的絕對(duì)路徑1。 接著通過絕對(duì)路徑打開該磁盤文件,并且通過文件屬性來設(shè)置相關(guān)響應(yīng)頭,比如:通過文件大小來設(shè)置Content—Length響應(yīng)頭(這里還只是設(shè)置對(duì)應(yīng)的字段值,并非創(chuàng)建實(shí)際的響應(yīng)頭,下同),告訴客戶端接收數(shù)據(jù)的長度;通過文件修改時(shí)間來設(shè)置Last—Modified響應(yīng)頭,那么客戶端下次再請(qǐng)求該靜態(tài)文件時(shí)可帶上該時(shí)間戳,那時(shí)Nginx就有可能直接返回304狀態(tài)碼,讓客戶端直接使用本地緩存,從而提高性能;等等。發(fā)送響應(yīng)體需要一些內(nèi)存資源,這會(huì)在發(fā)送響應(yīng)頭以前分配好,因?yàn)槿绻麅?nèi)存申請(qǐng)失敗可提前異常返回,避免可能出現(xiàn)響應(yīng)頭已經(jīng)發(fā)送出去后卻發(fā)現(xiàn)發(fā)送響應(yīng)體需要的內(nèi)存資源沒法成功申請(qǐng)的情況。當(dāng)然,發(fā)送響應(yīng)頭還需要經(jīng)過Nginx的過濾鏈。逐步順鏈調(diào)用下去,過濾鏈上的回調(diào)函數(shù)可能會(huì)對(duì)響應(yīng)頭數(shù)據(jù)進(jìn)行檢測(cè)、截獲、新增、修改和刪除等操作,不管怎樣,一般情況下,執(zhí)行流程會(huì)走到過濾鏈最末端的兩個(gè)函數(shù)內(nèi)。
媒體關(guān)注與評(píng)論
本書作者長期在ChinaUnix論壇C/C++版活躍,任職版主以來樂于助人,技術(shù)功底深厚。他結(jié)合自己多年應(yīng)用Nginx和解讀Nginx源碼的實(shí)戰(zhàn)經(jīng)驗(yàn),采用鞭辟入里的寫作風(fēng)格,用豐富的圖解和示例全面詳細(xì)闡釋了Nginx是什么,有什么功能特性,內(nèi)部如何運(yùn)作,具體如何實(shí)現(xiàn)等。相信本書的出版一定會(huì)得到廣大Nginx用戶和愛好者的歡迎。—— China Unix社區(qū)本書作者從實(shí)際情況出發(fā),以當(dāng)下新的系統(tǒng)版本和軟件版本為例,從最開始的搭建調(diào)試環(huán)境準(zhǔn)備到Nginx的源碼工作機(jī)制一一講解。本書還針對(duì)一些常用網(wǎng)站的需求,對(duì)Nginx常用的功能模塊進(jìn)行修改以符合實(shí)際需要。從我的職業(yè)角度來看,本書特別適合追求高性能、高標(biāo)準(zhǔn)的高級(jí)運(yùn)維工程師。——?jiǎng)Ⅵ?ChinaUnix版主,《高性能網(wǎng)站構(gòu)建實(shí)戰(zhàn)》作者Nginx是得到國內(nèi)外各大網(wǎng)站切實(shí)應(yīng)用、經(jīng)過實(shí)踐證明的優(yōu)秀項(xiàng)目。通過本書,你可以系統(tǒng)地學(xué)習(xí)和解讀Nginx源碼。這不僅是提高個(gè)人技能水平的最好學(xué)習(xí)方式,也是給自己職業(yè)生涯添籌加碼的最佳有效途徑?!獥顣?深圳市聞道移動(dòng)科技有限公司,技術(shù)總監(jiān)目前Nginx的應(yīng)用非常廣泛,本書從源碼角度對(duì)Nginx核心機(jī)制進(jìn)行了系統(tǒng)的剖析和梳理。不論是軟件開發(fā)工程師,還是運(yùn)維工程師,都非常值得一讀?!R劍 Cisco Systems公司,工程師得益于該書對(duì)Nginx的系統(tǒng)介紹,我們項(xiàng)目小組成員快速地了解了Nginx內(nèi)部原理,保障了項(xiàng)目的順利進(jìn)行。也向你鄭重推薦本書?!?jiǎng)⒔?華為技術(shù)有限公司,項(xiàng)目經(jīng)理除了與Nginx本身相關(guān)的邏輯之外,書中還結(jié)合作者個(gè)人經(jīng)驗(yàn)探討了軟件調(diào)試、數(shù)據(jù)結(jié)構(gòu)、I/O模型、TCP/HTTP協(xié)議等多個(gè)重要的方面,令人受益匪淺?!讨?LogicMonitor公司,工程師
編輯推薦
源碼之前,了無秘密。深入剖析Nginx是資深工程師多年研讀代碼、精心打磨之作。得到了ChinaUnix社區(qū)、運(yùn)維專家、一線工程師強(qiáng)烈推薦。本書從源碼剖析角度深入學(xué)習(xí)Nginx,對(duì)于了解其使用機(jī)理和二次開發(fā)都有幫助。幫助讀者知其然且知其所以然。深入剖析Nginx的作者具有較為豐富的源碼剖析和寫作經(jīng)驗(yàn)。深入剖析Nginx部分內(nèi)容在作者博客,ChinaUnix等社區(qū)發(fā)布后,瀏覽下載累計(jì)達(dá)3000人次,也獲得讀者的好評(píng)。
名人推薦
本書作者從實(shí)際情況出發(fā),以當(dāng)下新的系統(tǒng)版本和軟件版本為例,從最開始的搭建調(diào)試環(huán)境準(zhǔn)備到Nginx的源碼工作機(jī)制一一講解。本書還針對(duì)一些常用網(wǎng)站的需求,對(duì)Nginx常用的功能模塊進(jìn)行修改以符合實(shí)際需要。從我的職業(yè)角度來看,本書特別適合追求高性能、高標(biāo)準(zhǔn)的高級(jí)運(yùn)維工程師。 ——?jiǎng)Ⅵ?ChinaUnix 版主,《高性能網(wǎng)站構(gòu)建實(shí)戰(zhàn)》作者 Nglnx是得到國內(nèi)外各大網(wǎng)站切實(shí)應(yīng)用、經(jīng)過實(shí)踐證明的優(yōu)秀項(xiàng)目。通過本書,你可以系統(tǒng)地學(xué)習(xí)和解讀NginX源碼。這不僅是提高個(gè)人技能水平的最好學(xué)習(xí)方式,也是給自己職業(yè)生涯添籌加碼的最佳有效途徑。 ——楊暉 深圳市聞道移動(dòng)科技有限公司,技術(shù)總監(jiān) 目前Nginx的應(yīng)用非常廣泛,本書從源碼角度對(duì)NglnX核心機(jī)制進(jìn)行了系統(tǒng)的剖析和梳理。不論是軟件開發(fā)工程師,還是運(yùn)維工程師,都非常值得一讀。 ——賀劍 Cisco Systems公司,工程師 得益于該書對(duì)Nginx的系統(tǒng)介紹,我們項(xiàng)目小組成員快速地了解了Nginx內(nèi)部原理,保障了項(xiàng)目的順利進(jìn)行。也向你鄭重推薦本書。 ——?jiǎng)⒔?華為技術(shù)有限公司,項(xiàng)目經(jīng)理 除了與Nginx本身相關(guān)的邏輯之外,書中還結(jié)合作者個(gè)人經(jīng)驗(yàn)探討了軟件調(diào)試、數(shù)據(jù)結(jié)構(gòu)、I/O模型、TCP/HTTP協(xié)議等多個(gè)重要的方面,令人受益匪淺。 ——蔡洲 LogicMonitor公司,工程師
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載