深入剖析Nginx

出版時間:2013-5  出版社:人民郵電出版社  作者:高群凱  
Tag標(biāo)簽:無  

內(nèi)容概要

《深入剖析Nginx》不是一本關(guān)于Nginx配置指令如何使用的介紹手冊。《深入剖析Nginx》重點在于通過剖析Nginx的源代碼,探究其功能結(jié)構(gòu)及其內(nèi)部實現(xiàn)原理。全書共14章和3個附錄。首先介紹了開始剖析Nginx源代碼前的準(zhǔn)備工作,以及跟蹤和調(diào)試的方法;然后,分別深入分析了Nginx的進(jìn)程模型、數(shù)據(jù)結(jié)構(gòu)、配置指令、主要功能模塊、I/O事件處理、變量機制、客戶端請求過程、Filter模塊實例、負(fù)載均衡策略以及Handler模塊等。附錄部分提供了Nginx的編譯模塊、運行配置等有用信息。

作者簡介

高群凱,重慶大學(xué)計算機學(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)研究,對系統(tǒng)底層性能優(yōu)化、內(nèi)核oops宕機以及x86疑難問題排查等相關(guān)技術(shù)有一些研究和積累。曾著有《Lighttpd源碼分析》一書。個人博客:http://lenky.info/。

書籍目錄

第1章 源碼分析的準(zhǔn)備工作 1 1.1 主要特性 1 1.2 源碼下載 4 1.3 源碼目錄結(jié)構(gòu) 5 1.4 源碼分析工具 6 1.5 測試輔助工具 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對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機制 50 3.7 信號處理 59 3.7.1 準(zhǔn)備工作 60 3.7.2 設(shè)置生效 61 3.7.3 處理實例 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 配置項目解析準(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章 事件管理機制 134 7.1 I/O多路復(fù)用模型 134 7.2 epoll模型 138 7.3 事件處理 144 7.4 負(fù)載均衡 146 7.4.1 客戶端請求均衡 146 7.4.2 多核綁定 152 7.5 超時管理 153 第8章 變量機制 160 8.1 初識變量 160 8.2 支撐機制 163 8.3 腳本引擎 174 8.4 執(zhí)行順序 180 第9章 請求處理與響應(yīng) 182 9.1 創(chuàng)建監(jiān)聽套接口 182 9.2 創(chuàng)建連接套接口 188 9.3 請求處理 191 9.4 數(shù)據(jù)響應(yīng) 197 9.5 子請求 201 9.6 連接關(guān)閉 214 9.6.1 keepalive機制 217 9.6.2 延遲關(guān)閉機制 221 第10章 請求定位 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章 動態(tài)頁面請求處理 252 11.1 測試環(huán)境 252 11.2 客戶端發(fā)起Php請求 255 11.3 請求轉(zhuǎn)發(fā) 259 11.3.1 建立連接 261 11.3.2 發(fā)送請求數(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緩存功能的擴展 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)值計算 307 13.2.4 釋放后端服務(wù)器 307 13.3 IP哈希 310 選擇后端服務(wù)器 310 13.4 兩種策略對比 313 第14章 訪問控制 315 14.1 禁止指定IP訪問 315 14.2 密碼認(rèn)證訪問 318 14.3 其他訪問控制措施 327 14.3.1 禁止用戶通過IP地址訪問服務(wù)器 327 14.3.2 禁止對某目錄或某類文件的訪問 327 附錄A 329 附錄B 332 附錄C 333

章節(jié)摘錄

版權(quán)頁:   插圖:   對一個客戶端請求的處理,終于銜接到Nginx的Handler模塊來了,各個Handler模塊的處理在前面章節(jié)已經(jīng)描述過,所以這里不再多講。對于一個訪問靜態(tài)頁面的GET類型請求,最終會被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ā)送到客戶端,此時一個請求的處理與響應(yīng)也就完成,所以當(dāng)回到ngx—http_process—request()i函數(shù)的最末,調(diào)用到函數(shù)ngX http—run posted_requests()內(nèi)時,因為c—>destroyed為真而直接退出。下一節(jié)就具體來看http數(shù)據(jù)響應(yīng)的內(nèi)部邏輯過程。 http響應(yīng)消息也分為head頭部和body主體,和請求消息一致,也是頭部信息先發(fā)送,然后才是主體信息。本節(jié)仍以簡單的GET請求靜態(tài)頁面為例,來看看Nginx如何對客戶端做出數(shù)據(jù)響應(yīng)。 前面提到,簡單的GET請求靜態(tài)頁面最終會被ngx http static module模塊實際處理,執(zhí)行的函數(shù)為ngx http static handler0。該函數(shù)首先要做的當(dāng)然是找到請求靜態(tài)頁面所對應(yīng)的磁盤文件,通過組合當(dāng)前l(fā)ocation配置的根目錄與GET請求里的絕對URl即可得到該磁盤文件的絕對路徑1。 接著通過絕對路徑打開該磁盤文件,并且通過文件屬性來設(shè)置相關(guān)響應(yīng)頭,比如:通過文件大小來設(shè)置Content—Length響應(yīng)頭(這里還只是設(shè)置對應(yīng)的字段值,并非創(chuàng)建實際的響應(yīng)頭,下同),告訴客戶端接收數(shù)據(jù)的長度;通過文件修改時間來設(shè)置Last—Modified響應(yīng)頭,那么客戶端下次再請求該靜態(tài)文件時可帶上該時間戳,那時Nginx就有可能直接返回304狀態(tài)碼,讓客戶端直接使用本地緩存,從而提高性能;等等。發(fā)送響應(yīng)體需要一些內(nèi)存資源,這會在發(fā)送響應(yīng)頭以前分配好,因為如果內(nèi)存申請失敗可提前異常返回,避免可能出現(xiàn)響應(yīng)頭已經(jīng)發(fā)送出去后卻發(fā)現(xiàn)發(fā)送響應(yīng)體需要的內(nèi)存資源沒法成功申請的情況。當(dāng)然,發(fā)送響應(yīng)頭還需要經(jīng)過Nginx的過濾鏈。逐步順鏈調(diào)用下去,過濾鏈上的回調(diào)函數(shù)可能會對響應(yīng)頭數(shù)據(jù)進(jìn)行檢測、截獲、新增、修改和刪除等操作,不管怎樣,一般情況下,執(zhí)行流程會走到過濾鏈最末端的兩個函數(shù)內(nèi)。

媒體關(guān)注與評論

本書作者長期在ChinaUnix論壇C/C++版活躍,任職版主以來樂于助人,技術(shù)功底深厚。他結(jié)合自己多年應(yīng)用Nginx和解讀Nginx源碼的實戰(zhàn)經(jīng)驗,采用鞭辟入里的寫作風(fēng)格,用豐富的圖解和示例全面詳細(xì)闡釋了Nginx是什么,有什么功能特性,內(nèi)部如何運作,具體如何實現(xiàn)等。相信本書的出版一定會得到廣大Nginx用戶和愛好者的歡迎?!?China Unix社區(qū)本書作者從實際情況出發(fā),以當(dāng)下新的系統(tǒng)版本和軟件版本為例,從最開始的搭建調(diào)試環(huán)境準(zhǔn)備到Nginx的源碼工作機制一一講解。本書還針對一些常用網(wǎng)站的需求,對Nginx常用的功能模塊進(jìn)行修改以符合實際需要。從我的職業(yè)角度來看,本書特別適合追求高性能、高標(biāo)準(zhǔn)的高級運維工程師?!獎Ⅵ?ChinaUnix版主,《高性能網(wǎng)站構(gòu)建實戰(zhàn)》作者Nginx是得到國內(nèi)外各大網(wǎng)站切實應(yīng)用、經(jīng)過實踐證明的優(yōu)秀項目。通過本書,你可以系統(tǒng)地學(xué)習(xí)和解讀Nginx源碼。這不僅是提高個人技能水平的最好學(xué)習(xí)方式,也是給自己職業(yè)生涯添籌加碼的最佳有效途徑?!獥顣?深圳市聞道移動科技有限公司,技術(shù)總監(jiān)目前Nginx的應(yīng)用非常廣泛,本書從源碼角度對Nginx核心機制進(jìn)行了系統(tǒng)的剖析和梳理。不論是軟件開發(fā)工程師,還是運維工程師,都非常值得一讀?!R劍 Cisco Systems公司,工程師得益于該書對Nginx的系統(tǒng)介紹,我們項目小組成員快速地了解了Nginx內(nèi)部原理,保障了項目的順利進(jìn)行。也向你鄭重推薦本書?!獎⒔?華為技術(shù)有限公司,項目經(jīng)理除了與Nginx本身相關(guān)的邏輯之外,書中還結(jié)合作者個人經(jīng)驗探討了軟件調(diào)試、數(shù)據(jù)結(jié)構(gòu)、I/O模型、TCP/HTTP協(xié)議等多個重要的方面,令人受益匪淺。——蔡洲 LogicMonitor公司,工程師

編輯推薦

源碼之前,了無秘密。深入剖析Nginx是資深工程師多年研讀代碼、精心打磨之作。得到了ChinaUnix社區(qū)、運維專家、一線工程師強烈推薦。本書從源碼剖析角度深入學(xué)習(xí)Nginx,對于了解其使用機理和二次開發(fā)都有幫助。幫助讀者知其然且知其所以然。深入剖析Nginx的作者具有較為豐富的源碼剖析和寫作經(jīng)驗。深入剖析Nginx部分內(nèi)容在作者博客,ChinaUnix等社區(qū)發(fā)布后,瀏覽下載累計達(dá)3000人次,也獲得讀者的好評。

名人推薦

本書作者從實際情況出發(fā),以當(dāng)下新的系統(tǒng)版本和軟件版本為例,從最開始的搭建調(diào)試環(huán)境準(zhǔn)備到Nginx的源碼工作機制一一講解。本書還針對一些常用網(wǎng)站的需求,對Nginx常用的功能模塊進(jìn)行修改以符合實際需要。從我的職業(yè)角度來看,本書特別適合追求高性能、高標(biāo)準(zhǔn)的高級運維工程師。 ——劉鑫 ChinaUnix 版主,《高性能網(wǎng)站構(gòu)建實戰(zhàn)》作者 Nglnx是得到國內(nèi)外各大網(wǎng)站切實應(yīng)用、經(jīng)過實踐證明的優(yōu)秀項目。通過本書,你可以系統(tǒng)地學(xué)習(xí)和解讀NginX源碼。這不僅是提高個人技能水平的最好學(xué)習(xí)方式,也是給自己職業(yè)生涯添籌加碼的最佳有效途徑。 ——楊暉 深圳市聞道移動科技有限公司,技術(shù)總監(jiān) 目前Nginx的應(yīng)用非常廣泛,本書從源碼角度對NglnX核心機制進(jìn)行了系統(tǒng)的剖析和梳理。不論是軟件開發(fā)工程師,還是運維工程師,都非常值得一讀。 ——賀劍 Cisco Systems公司,工程師 得益于該書對Nginx的系統(tǒng)介紹,我們項目小組成員快速地了解了Nginx內(nèi)部原理,保障了項目的順利進(jìn)行。也向你鄭重推薦本書。 ——劉杰 華為技術(shù)有限公司,項目經(jīng)理 除了與Nginx本身相關(guān)的邏輯之外,書中還結(jié)合作者個人經(jīng)驗探討了軟件調(diào)試、數(shù)據(jù)結(jié)構(gòu)、I/O模型、TCP/HTTP協(xié)議等多個重要的方面,令人受益匪淺。 ——蔡洲 LogicMonitor公司,工程師

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    深入剖析Nginx PDF格式下載


用戶評論 (總計2條)

 
 

  •   這本書好像校正的不怎么好,有幾個明顯的錯誤。而且講的也不是很細(xì)。個人感受。等讀完再追加評論。
  •   這本書非常好,建議想了解Nginx的學(xué)習(xí)學(xué)習(xí)
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7