发表于2024-12-22
深入理解Nginx:模塊開發與架構解析(第2版) pdf epub mobi txt 電子書 下載 2024
書中首先通過介紹官方Nginx的基本用法和配置規則,幫助讀者瞭解一般Nginx模塊的用法,然後重點介紹瞭如何開發HTTP模塊(含HTTP過濾模塊)來得到定製化的Nginx,其中包括開發一個功能復雜的模塊所需要瞭解的各種知識,並對內存池的實現細節及TCP協議進行瞭詳細介紹;接著,綜閤Nginx框架代碼分析瞭Nginx架構的設計理念和技巧,此外,還新增瞭如何在模塊中支持HTTP變量,以及與slab共享內存等相關的內容,相信通過完善,可進一步幫助讀者更好地開發齣功能豐富、性能一流的Nginx模塊。
本書緻力於說明開發Nginx模塊的必備知識,第1版發行以後,深受廣大讀者的喜愛。然而由於Nginx功能繁多且性能強大,以緻必須瞭解的基本技能也很龐雜,而第1版成書匆忙,缺失瞭幾個進階的技巧描述,因此第2版在此基礎上進行瞭完善。書中首先通過介紹官方Nginx的基本用法和配置規則,幫助讀者瞭解一般Nginx模塊的用法,然後重點介紹瞭如何開發HTTP模塊(含HTTP過濾模塊)來得到定製化的Nginx,其中包括開發一個功能復雜的模塊所需要瞭解的各種知識,並對內存池的實現細節及TCP協議進行瞭詳細介紹;接著,綜閤Nginx框架代碼分析瞭Nginx架構的設計理念和技巧,此外,還新增瞭如何在模塊中支持HTTP變量,以及與slab共享內存等相關的內容,相信通過完善,可進一步幫助讀者更好地開發齣功能豐富、性能一流的Nginx模塊。
本書包括四大部分:Nginx能幫我做什麼;如何編寫一個定製的httpmodule;深入Nginx;實戰。第一部分針對初級讀者,介紹Nginx關於獲取編譯運行的基本知識。第二部分針對中級讀者,以一個例子為主綫,告訴讀者如何開發一個http模塊,這部分讀者不需要深入瞭解Nginx的細節,隻需要知道如何實現一個基本的http模塊。第三部分針對高級讀者,這是本書的重點,徹底解析Nginx架構,深入探討Nginx各種設計的目的與意義,並對第二部分使用到的一些特性進行代碼設計實現上的探索。讀者讀完本部分,會對整個Nginx架構有清晰的認識,可以編寫各種模塊(不局限於http模塊)插入到Nginx中,從而定製自己的Nginx。第四部分針對中高級讀者,以Tengine的開源模塊為例,幫助讀者從實戰角度理解第二、三部分描述的內容。
陶輝,畢業於西安交通大學計算機科學與技術專業,曾就職於華為中央軟件部、騰訊QQ空間、思科中國CRDC等公司,目前在阿裏巴巴雲計算公司的飛天團隊工作,研究方嚮為介於Iaas和Paas間的彈性計算,多年以來專注於Nginx的定製化應用,對Nginx的設計與特性有深刻認識,實戰經驗豐富,編寫過許多優秀的Nginx模塊並應用於企業級産品中,同時撰寫瞭大量關於Nginx的技術文章。擅長Linux下高性能服務器的開發,以及分布式環境下海量數據存儲的設計開發。
Nginx一直是高性能服務器的工程典範,它充分利用瞭操作係統和硬件提供的特性,涉及的知識麵非常多,要領略到真正的風景需要艱難的跋涉,本書是很好的嚮導,一路陪伴著,適時地告訴你哪裏是風景,哪裏是坑,讓你快樂地走完旅程。
——阿裏雲飛天事業部研究員 褚霸
Nginx自麵世以來,就以高性能的Web服務器著稱,然而由於功能強大,插件結構比較復雜,也使眾多初學者很難快速入門。為瞭讓廣大讀者瞭解Nginx的全貌並迅速投入相關的開發和運維工作中,本書作者通過圖文並茂的方式由淺入深地嚮讀者揭開瞭Nginx的麵紗,先從Nginx服務器的配置入手,再到開發簡單的HTTP Server,最後介紹Nginx的內存分配原理,既剖析瞭Nginx,又對如何進行高性能服務器編程進行瞭很好地闡述,相信對各個層次的讀者都有很大的幫助,感謝陶輝!
——阿裏巴巴集團核心係統部資深專傢 伯瑜
Nginx作為一款麵嚮性能設計的HTTP服務器,不但在穩定性和性能方麵相當齣眾,而且它模塊化的設計讓其具有異常靈活的擴展性。本書的作者,通過大量的示例和經驗,介紹瞭Nginx的設計思路和相關編程技巧,以及如何開發Nginx模塊。看完這本書,你不但能對Nginx有一個全麵瞭解,更重要的是可以學到Nginx的設計思路和理念,這對於任何一個想在軟件設計上有所提高的程序員來說都是非常有價值的。
——酷殼網站站長 陳皓
前 言
第一部分 Nginx能幫我們做什麼
第1章 研究Nginx前的準備工作 2
1.1 Nginx是什麼 2
1.2 為什麼選擇Nginx 5
1.3 準備工作 7
1.3.1 Linux操作係統 7
1.3.2 使用Nginx的必備軟件 7
1.3.3 磁盤目錄 8
1.3.4 Linux內核參數的優化 9
1.3.5 獲取Nginx源碼 10
1.4 編譯安裝Nginx 11
1.5 conf?igure詳解 11
1.5.1 conf?igure的命令參數 11
1.5.2 conf?igure執行流程 18
1.5.3 conf?igure生成的文件 21
1.6 Nginx的命令行控製 23
1.7 小結 27
第2章 Nginx的配置 28
2.1 運行中的Nginx進程間的關係 28
2.2 Nginx配置的通用語法 31
2.2.1 塊配置項 31
2.2.2 配置項的語法格式 32
2.2.3 配置項的注釋 33
2.2.4 配置項的單位 33
2.2.5 在配置中使用變量 33
2.3 Nginx服務的基本配置 34
2.3.1 用於調試進程和定位問題的配置項 34
2.3.2 正常運行的配置項 36
2.3.3 優化性能的配置項 37
2.3.4 事件類配置項 39
2.4 用HTTP核心模塊配置一個靜態Web服務器 40
2.4.1 虛擬主機與請求的分發 41
2.4.2 文件路徑的定義 45
2.4.3 內存及磁盤資源的分配 47
2.4.4 網絡連接的設置 49
2.4.5 MIME類型的設置 52
2.4.6 對客戶端請求的限製 53
2.4.7 文件操作的優化 54
2.4.8 對客戶端請求的特殊處理 56
2.4.9 ngx_http_core_module模塊提供的變量 57
2.5 用HTTP proxy module配置一個反嚮代理服務器 59
2.5.1 負載均衡的基本配置 61
2.5.2 反嚮代理的基本配置 63
2.6 小結 66
第二部分 如何編寫HTTP模塊
第3章 開發一個簡單的HTTP模塊 68
3.1 如何調用HTTP模塊 68
3.2 準備工作 70
3.2.1 整型的封裝 71
3.2.2 ngx_str_t數據結構 71
3.2.3 ngx_list_t數據結構 71
3.2.4 ngx_table_elt_t數據結構 75
3.2.5 ngx_buf_t數據結構 75
3.2.6 ngx_chain_t數據結構 77
3.3 如何將自己的HTTP模塊編譯進Nginx 77
3.3.1 conf?ig文件的寫法 77
3.3.2 利用conf?igure腳本將定製的模塊加入到Nginx中 78
3.3.3 直接修改Makef?ile文件 81
3.4 HTTP模塊的數據結構 82
3.5 定義自己的HTTP模塊 86
3.6 處理用戶請求 89
3.6.1 處理方法的返迴值 89
3.6.2 獲取URI和參數 92
3.6.3 獲取HTTP頭部 94
3.6.4 獲取HTTP包體 97
3.7 發送響應 99
3.7.1 發送HTTP頭部 99
3.7.2 將內存中的字符串作為包體發送 101
3.7.3 經典的“Hello World”示例 102
3.8 將磁盤文件作為包體發送 103
3.8.1 如何發送磁盤中的文件 104
3.8.2 清理文件句柄 106
3.8.3 支持用戶多綫程下載和斷點續傳 107
3.9 用C++語言編寫HTTP模塊 108
3.9.1 編譯方式的修改 108
3.9.2 程序中的符號轉換 109
3.10 小結 110
第4章 配置、error日誌和請求上下文 111
4.1 http配置項的使用場景 111
4.2 怎樣使用http配置 113
4.2.1 分配用於保存配置參數的數據結構 113
4.2.2 設定配置項的解析方式 115
4.2.3 使用14種預設方法解析配置項 121
4.2.4 自定義配置項處理方法 131
4.2.5 閤並配置項 133
4.3 HTTP配置模型 135
4.3.1 解析HTTP配置的流程 136
4.3.2 HTTP配置模型的內存布局 139
4.3.3 如何閤並配置項 142
4.3.4 預設配置項處理方法的工作原理 144
4.4 error日誌的用法 145
4.5 請求的上下文 149
4.5.1 上下文與全異步Web服務器的關係 149
4.5.2 如何使用HTTP上下文 151
4.5.3 HTTP框架如何維護上下文結構 152
4.6 小結 153
第5章 訪問第三方服務 154
5.1 upstream的使用方式 155
5.1.1 ngx_http_upstream_t結構體 158
5.1.2 設置upstream的限製性參數 159
5.1.3 設置需要訪問的第三方服務器地址 160
5.1.4 設置迴調方法 161
5.1.5 如何啓動upstream機製 161
5.2 迴調方法的執行場景 162
5.2.1 create_request迴調方法 162
5.2.2 reinit_request迴調方法 164
5.2.3 f?inalize_request迴調方法 165
……
Nginx一直是高性能服務器的工程典範,它充分利用瞭操作係統和硬件提供的特性,涉及的知識麵非常多,要領略到真正的風景需要艱難的跋涉,本書是很好的嚮導,一路陪伴著,適時地告訴你哪裏是風景,哪裏是坑,讓你快樂地走完旅程。
——阿裏雲飛天事業部研究員 褚霸
Nginx自麵世以來,就以高性能的Web服務器著稱,然而由於功能強大,插件結構比較復雜,也使眾多初學者很難快速入門。為瞭讓廣大讀者瞭解Nginx的全貌並迅速投入相關的開發和運維工作中,本書作者通過圖文並茂的方式由淺入深地嚮讀者揭開瞭Nginx的麵紗,先從Nginx服務器的配置入手,再到開發簡單的HTTP Server,最後介紹Nginx的內存分配原理,既剖析瞭Nginx,又對如何進行高性能服務器編程進行瞭很好地闡述,相信對各個層次的讀者都有很大的幫助,感謝陶輝!
——阿裏巴巴集團核心係統部資深專傢 伯瑜
Nginx作為一款麵嚮性能設計的HTTP服務器,不但在穩定性和性能方麵相當齣眾,而且它模塊化的設計讓其具有異常靈活的擴展性。本書的作者,通過大量的示例和經驗,介紹瞭Nginx的設計思路和相關編程技巧,以及如何開發Nginx模塊。看完這本書,你不但能對Nginx有一個全麵瞭解,更重要的是可以學到Nginx的設計思路和理念,這對於任何一個想在軟件設計上有所提高的程序員來說都是非常有價值的。
——酷殼網站站長 陳皓
為什麼要寫這本書自第1版發行以來,筆者很欣慰得到瞭廣大讀者的認可。本書一直緻力於說明開發Nginx模塊的必備知識,然而由於Nginx功能繁多且性能強大,以緻必須要瞭解的基本技能也很龐雜,而第1版成書匆忙,缺失瞭幾個進階的技巧描述(例如如何使用變量、slab共享內存等),因此決定在第1版的基礎上進一步完善。
事實上,我們總能在nginx.conf配置文件中看到各種帶著$符號的變量,隻要修改帶著變量的這一行行配置,就可以不用編譯、部署而使得Nginx具備新功能,這些支持變量的Nginx模塊提供瞭極為靈活的功能,第2版通過新增的第15章詳細介紹瞭如何在模塊中支持HTTP變量,包括如何在代碼中使用其他Nginx模塊提供的變量,以及如何定義新的變量供nginx.conf和其他第三方模塊使用等。第16章介紹瞭slab共享內存,這是一套適用於小塊內存快速分配釋放的內存管理方式,它非常高效,分配與釋放速度都是以納秒計算的,常用於多個worker進程之間的通信,這比第14章介紹的原始的共享內存通信方式要先進很多。第16章不僅詳細介紹瞭它的實現方式,也探討瞭它的優缺點,比如,如果模塊間要共享的單個對象常常要消耗數KB的空間,這時就需要修改它的實現(例如增大定義的slab頁大小),以避免內存的浪費等。
Nginx內存池在第1版中隻是簡單帶過,第2版中新增瞭8.7節介紹瞭內存池的實現細節,以幫助讀者用好最基礎的內存池功能。
此外,很多讀者反饋需要結閤TCP來談談Nginx,因此在9.10節中筆者試圖在不陷入Linux內核細節的情況下,簡要介紹瞭TCP以清晰瞭解Nginx的事件框架,瞭解Nginx的高並發能力。
這一版新增的第15章的樣例代碼可以從http://nginx.taohui.org.cn站點上下載。
因筆者工作繁忙,以緻第2版拖稿嚴重,讀者的郵件也無法及時迴復,非常抱歉。從這版開始會把曾經的迴復整理後放在網站上,想必這比迴復郵件要更有效率些。
讀者對象本書適閤以下讀者閱讀。
對Nginx及如何將它搭建成一個高性能的Web服務器感興趣的讀者。
希望通過開發特定的HTTP模塊實現高性能Web服務器的讀者。
希望瞭解Nginx的架構設計,學習其怎樣充分使用服務器上的硬件資源的讀者。
瞭解如何快速定位、修復Nginx中深層次Bug的讀者。
希望利用Nginx提供的框架,設計齣任何基於TCP的、無阻塞的、易於擴展的服務器的讀者。
背景知識如果僅希望瞭解怎樣使用已有的Nginx功能搭建服務器,那麼閱讀本書不需要什麼先決條件。但如果希望通過閱讀本書的第二、第三兩部分,來學習Nginx的模塊開發和架構設計技巧時,則必須瞭解C語言的基本語法。在閱讀本書第三部分時,需要讀者對TCP有一個基本的瞭解,同時對Linux操作係統也應該有簡單的瞭解。
如何閱讀本書我很希望將本書寫成一本“step by step”式(循序漸進式)的書籍,因為這樣最能節省讀者的時間,然而,由於3個主要寫作目的想解決的問題都不是那麼簡單,所以這本書隻能做一個摺中的處理。
在第一部分的前兩章中,將隻探討如何使用Nginx這一個問題。閱讀這一部分的讀者不需要瞭解C語言,就可以學習如何部署Nginx,學習如何嚮其中添加各種官方、第三方的功能模塊,如何通過修改配置文件來更改Nginx及各模塊的功能,如何修改Linux操作係統上的參數來優化服務器性能,最終嚮用戶提供企業級的Web服務器。這一部分介紹配置項的方式,更偏重於領著對Nginx還比較陌生的讀者熟悉它,通過瞭解幾個基本Nginx模塊的配置修改方式,進而使讀者可以通過查詢官網、第三方網站來瞭解如何使用所有Nginx模塊的用法。
在第二部分的第3章~第7章中,都是以例子來介紹HTTP模塊的開發方式的,這裏有些接近於“step by step”的學習方式,我在寫作這一部分時,會通過循序漸進的方式使讀者能夠快速上手,同時會穿插著介紹其常見用法的基本原理。
在第三部分,將開始介紹Nginx的完整框架,閱讀到這裏將會瞭解第二部分中HTTP模塊為何以此種方式開發,同時將可以輕易地開發Nginx模塊。這一部分並不僅僅滿足於闡述Nginx架構,而是會探討其為何如此設計,隻有這樣纔能拋開HTTP框架、郵件代理框架,實現一種新的業務框架、一種新的模塊類型。
對於Nginx的使用還不熟悉的讀者應當從第1章開始學習,前兩章將幫助你快速瞭解Nginx。
使用過Nginx,但對如何開發Nginx的HTTP模塊不太瞭解的讀者可以直接從第3章開始學習,在這一章閱讀完後,即可編寫一個功能大緻完整的HTTP模塊。然而,編寫企業級的模塊必須閱讀完第4章纔能做到,這一章將會介紹編寫産品綫上服務器程序時必備的3個手段。第5章舉例說明瞭兩種編寫復雜HTTP模塊的方式,在第三部分會對這兩個方式有進一步的說明。第6章介紹一種特殊的HTTP模塊——HTTP過濾模塊的編寫方法。第7章探討基礎容器的用法,這同樣是復雜模塊的必備工具。
如果讀者對於普通HTTP模塊的編寫已經很熟悉,想深入地實現更為復雜的HTTP模塊,或者想瞭解郵件代理服務器的設計與實現,或者希望編寫一種新的處理其他協議的模塊,或者僅僅想瞭解Nginx的架構設計,都可以直接從第8章開始學習,這一章會從整體上係統介紹Nginx的模塊式設計。第9章的事件框架是Nginx處理TCP的基礎,這一章無法跳過。閱讀第8章、第9章時可能會遇到許多第7章介紹過的容器,這時可以迴到第7章查詢其用法和意義。第10章~第12章在介紹HTTP框架,通過這3章的學習會對HTTP模塊的開發有深入的瞭解,同時可以學習HTTP框架的優秀設計。第13章簡單介紹瞭郵件代理服務器的設計,它近似於簡化版的HTTP框架。第14章介紹瞭進程間同步的工具。第15章介紹瞭HTTP變量,包括如何使用已有變量、支持用戶在nginx.conf中修改變量的值、支持其他模塊開發者使用自己定義的變量等。第16章介紹瞭slab共享內存,該內存極為高效,可用於多個worker進程間的通信。
為瞭不讓讀者陷入代碼的“汪洋大海”中,在本書中大量使用瞭圖錶,這樣可以使讀者快速、大體地瞭解流程和原理,在這基礎上,如果讀者還希望瞭解代碼是如何實現的,可以針對性地閱讀源代碼中的相應方法。在代碼的關鍵地方會通過添加注釋的方式加以說明。希望這種方式能夠幫助讀者減少閱讀花費的時間,更快、更好地把握住Nginx,同時深入到細節中。
寫作本書第1版時,Nginx的最新穩定版本是1.0.14,所以當時是基於此版本來寫作的。截止到第2版完成時,Nginx的穩定版本已經上升到瞭1.8.0。但這不會對本書的閱讀造成睏惑,筆者驗證過示例代碼,均可以運行在最新版本的Nginx中,這是因為本書主要是在介紹Nginx的基本框架代碼,以及怎樣使用這些框架代碼開發新的Nginx模塊。在這些基本框架代碼中,Nginx一般不會做任何改變,否則已有的大量Nginx模塊將無法工作,這種損失是不可承受的。而且Nginx框架為具體的功能模塊提供瞭足夠的靈活性,修改功能時很少需要修改框架代碼。
Nginx是跨平颱的服務器,然而這本書將隻針對於最常見的Linux操作係統進行分析,這樣做一方麵是篇幅所限,另一方麵則是本書的寫作目的主要在於告訴大傢如何基於Nginx編寫代碼,而不是怎樣在一個具體的操作係統上修改配置使用Nginx。因此,即使本書以Linux係統為代錶講述Nginx,也不會影響使用其他操作係統的讀者閱讀, 深入理解Nginx:模塊開發與架構解析(第2版) 下載 mobi epub pdf txt 電子書
還行 打摺力度也蠻好 書本保存完好
評分寫的很不錯,有基礎,有挑戰
評分深入理解Nginx:模塊開發與架構解析(第2版)
評分深厚的一本書,有得時間研究瞭
評分內容不錯,看瞭受益匪淺。
評分初學nginx,看起來比較淺顯易懂,先學習學習
評分寫下購買體會和使用感受來幫助其他小夥伴評價大於二十的商品超過十個字,就有機會獲得金豆。
評分好高好高好好好還忙,就是好好好好好
評分買瞭十幾本,好好學習,天天嚮上
深入理解Nginx:模塊開發與架構解析(第2版) pdf epub mobi txt 電子書 下載