本書詳解了Nginx架構(gòu)、執(zhí)行流程、模塊實現(xiàn)與數(shù)據(jù)結(jié)構(gòu),剖析了Nginx源碼設計精髓與應用。
第1~2章介紹Nginx編譯安裝、基礎架構(gòu)與設計理念,涵蓋源碼結(jié)構(gòu)、J程模型等,讓讀者對Nginx有整體性了解。
第3章從內(nèi)存池、共享內(nèi)存展開介紹Nginx的內(nèi)存管理與使用。
第4章分析Nginx的數(shù)據(jù)結(jié)構(gòu),即字符串、數(shù)組、鏈表、隊列、散列、紅黑樹、基數(shù)樹的數(shù)據(jù)結(jié)構(gòu)和算法。
第5章詳細介紹main配置塊、events配置塊與http配置塊,呈現(xiàn)Nginx配置解析的全過程。
第6章完整地介紹了Nginx的 J程管理,涵蓋 J程模式、master J程、worker J程以及 J程間通信機制。
第7章詳細分析HTTP模塊及其處理的11個階段,如模塊初始化流程、請求解析、請求響應等。
第8章介紹了Upstream機制,涵蓋初始化、上下游連接建立、長連接等,著重介紹了FastCGI通信流程。
第9章詳細介紹Event模塊的實現(xiàn)以及Nginx中的驚群處理。
第10章介紹Nginx的負載均衡、限流、日志等模塊實現(xiàn)。
第11章介紹跨平臺實現(xiàn),涵蓋編譯過程、共享內(nèi)存等。
第12章介紹Nginx的RTMP直播服務實現(xiàn),著重介紹RTMP包協(xié)議與中繼模塊實現(xiàn)。
適讀人群 :Web開發(fā)工程師、架構(gòu)師、網(wǎng)絡工程師、架構(gòu)師 (1)理解源碼:涵蓋內(nèi)存、配置、進程、網(wǎng)絡、事件、負載、日志等模塊。
(2)直播模塊開發(fā):Nginx的RTMP直播服務實現(xiàn),經(jīng)過百萬在線驗證實踐。
(3) 跨平臺實現(xiàn):涵蓋編譯過程、共享內(nèi)存等。
(4)直擊本質(zhì):多角度分析Nginx底層原理和設計,揭示Nginx高并發(fā)高性能本質(zhì)。
【本書特色】
內(nèi)容豐富:除了Nginx相關的進程、數(shù)據(jù)結(jié)構(gòu)、配置、HTTP模塊、內(nèi)存等內(nèi)容,還附帶編譯腳手架和RTMP模塊的詳細講解。通過學習這些內(nèi)容,讀者可以了解模塊的構(gòu)成,開發(fā)定制模塊。
深入淺出:Nginx源碼設計中涉及很多知識,這對入門讀者來說有一定的難度。所以本書結(jié)合案例分析,讓讀者更輕松地理解這些龐雜、有難度的知識。
實戰(zhàn)講解:通過關鍵代碼片段以及原理分析進行實戰(zhàn)難點講解。某些代碼分析還帶有源碼調(diào)試分析與處理流程圖,便于讀者動手實戰(zhàn),快速入門。
【本書結(jié)構(gòu)】
本書共12章,主要內(nèi)容介紹如下。
第1章介紹Nginx源碼與編譯安裝,第2章介紹Nginx基礎架構(gòu)與設計理念,這兩章從Nginx的優(yōu)勢、源碼結(jié)構(gòu)、進程模型等幾個方面概述Nginx。
第3章介紹Nginx的內(nèi)存管理,從內(nèi)存池、共享內(nèi)存兩方面介紹Nginx內(nèi)存管理的相關內(nèi)容。
第4章介紹Nginx的基本數(shù)據(jù)結(jié)構(gòu),包括字符串、數(shù)組、鏈表、隊列、散列、紅黑樹、基數(shù)樹的數(shù)據(jù)結(jié)構(gòu)和算法。
第5章解析Nginx的配置文件,通過對main配置塊、events配置塊與http配置塊的詳細介紹,概述Nginx配置解析的全過程。
第6章介紹Nginx進程機制,通過進程模式、Master進程、Worker進程以及進程間通信機制,完整介紹Nginx進程的管理。
第7章介紹HTTP模塊,通過服務初始化、請求解析、HTTP請求處理以及HTTP請求響應,詳細介紹HTTP模塊的處理過程。
第8章介紹Upstream機制,對Upstream初始化、上下游連接建立、長連接、FastCGI模塊做了詳細介紹。
第9章介紹Event模塊實現(xiàn),內(nèi)容涉及Nginx事件模型的文件事件、時間事件、進程池、連接池等事件處理流程。
第10章介紹Nginx的負載均衡、限流、日志等模塊的實現(xiàn)。
第11章介紹跨平臺實現(xiàn),對Nginx的configure編譯文件、跨平臺原子操作和鎖進行詳細介紹。
第12章介紹基于Nginx的RTMP直播服務實現(xiàn)。
【預備知識】
讀者在學習本書之前可以對以下知識進行初步了解,以便更好地學習與理解本書。
C/C++基礎:首先要掌握C/C++語言基礎,這樣有助于理解源碼語意、語法以及相關的業(yè)務邏輯。
GDB調(diào)試:本書中的一些代碼片段是采用GDB進行調(diào)試的,因此了解GDB調(diào)試工具有助于對Nginx的進程進行調(diào)試。
Nginx基礎使用:本書基于Nginx 1.160版本編寫,如果你對Nginx的一些使用已經(jīng)了解,學習起來會更容易。
HTTP及其網(wǎng)絡編程基礎知識。
★聶松松
好未來學而思網(wǎng)校學習研發(fā)直播系統(tǒng)后端負責人,負責網(wǎng)校核心直播系統(tǒng)開發(fā)和架構(gòu)工作,擁有多年音視頻及流媒體相關工作經(jīng)驗,精通Nginx、ffmpeg相關技術(shù)棧。
★趙禹
好未來后端資深開發(fā)工程師,曾參與自主創(chuàng)業(yè)。目前負責云容器平臺Kubernetes組件開發(fā),熟悉PHP、Nginx、Redis、MySQL等源碼實現(xiàn),樂于鉆研技術(shù)。
★施洪寶
好未來后端開發(fā)專家,對Redis、Nginx、MySQL等開源軟件有較深的理解,熟悉C/C++、Go語言開發(fā),樂于鉆研技術(shù),合著有《Redis 5設計與源碼分析》。
★景羅
高級技術(shù)專家,曾在搜狐、新浪工作,擁有7年后端架構(gòu)開發(fā)經(jīng)驗,熟悉PHP、Nginx、Redis、MySQL等源碼實現(xiàn),擅長高并發(fā)處理及大型網(wǎng)站架構(gòu)開發(fā)。
★黃桃
高級技術(shù)專家,曾在滴滴等公司工作,擁有8年后端架構(gòu)開發(fā)經(jīng)驗,著有《PHP 7底層設計與源碼實現(xiàn)》等書籍。
★李樂
好未來學而思網(wǎng)校PHP開發(fā)專家,樂于鉆研技術(shù)與源碼研究,對Redis和Nginx有較深的理解,合著有《Redis 5設計與源碼分析》。
★張報
好未來集團接入層網(wǎng)關方向負責人,對Nginx、Tengine、OpenResty等高性能Web服務器有深入理解,精通大型站點架構(gòu)與流量調(diào)度系統(tǒng)的設計與實現(xiàn)。
★閆昌
好未來后端開發(fā)專家,深耕信息安全領域多年,對Linux服務端開發(fā)有較深見解,擅長高并發(fā)業(yè)務的實現(xiàn)。
★田峰
學而思學服研發(fā)部負責人,從業(yè)10余年,曾在搜狗、百度、360等公司從事研發(fā)和技術(shù)管理工作,在高性能服務架構(gòu)設計及復雜業(yè)務系統(tǒng)開發(fā)方面擁有豐富的經(jīng)驗。
前 言
第1章 Nginx源碼與編譯安裝 1
1.1 Nginx優(yōu)勢與4種應用示例 1
1.2 Nginx源碼結(jié)構(gòu) 4
1.3 Nginx編譯安裝 5
1.4 本章小結(jié) 6
第2章 Nginx基礎架構(gòu)與設計理念 7
2.1 Nginx進程模型 7
2.2 Nginx模塊化設計 9
2.2.1 模塊分類 9
2.2.2 模塊接口 10
2.2.3 模塊分工 12
2.3 Nginx事件驅(qū)動 13
2.4 本章小結(jié) 14
第3章 Nginx內(nèi)存管理 15
3.1 Nginx內(nèi)存管理簡介 15
3.2 Nginx內(nèi)存池 16
3.2.1 內(nèi)存池結(jié)構(gòu) 16
3.2.2 申請內(nèi)存 17
3.2.3 釋放內(nèi)存 20
3.3 Nginx共享內(nèi)存 22
3.3.1 共享內(nèi)存的創(chuàng)建及銷毀 22
3.3.2 互斥鎖 23
3.3.3 共享內(nèi)存管理 25
3.3.4 共享內(nèi)存使用 30
3.4 本章小結(jié) 31
第4章 基本數(shù)據(jù)結(jié)構(gòu) 32
4.1 字符串 32
4.2 數(shù)組 33
4.3 鏈表 35
4.4 隊列 37
4.5 散列 42
4.6 紅黑樹 46
4.7 基數(shù)樹 56
4.8 本章小結(jié) 59
第5章 配置文件解析 60
5.1 配置文件簡介 60
5.2 主函數(shù)ngx_conf_parse 63
5.3 解析main配置 65
5.3.1 創(chuàng)建main配置上下文 65
5.3.2 解析配置指令 66
5.4 解析events配置塊 69
5.5 解析http配置塊 71
5.5.1 main配置解析 71
5.5.2 server配置解析 74
5.5.3 location配置解析 76
5.5.4 配置合并 79
5.5.5 location配置再處理 81
5.5.6 upstream配置解析 83
5.6 本章小結(jié) 85
第6章 Nginx進程機制 86
6.1 Nginx進程模式 86
6.1.1 daemon模式 86
6.1.2 單進程模式和多進程模式 88
6.1.3 進程模式源碼解析 88
6.2 Master進程 91
6.3 Worker進程 93
6.4 進程間通信機制 99
6.4.1 信號定義 99
6.4.2 信號注冊 101
6.4.3 信號處理 102
6.4.4 Master進程處理機制 106
6.4.5 Worker進程處理機制 110
6.4.6 Master進程與Worker進程通信 111
6.5 本章小結(jié) 115
第7章 HTTP模塊 116
7.1 整體流程 117
7.1.1 HTTP模塊初始化 117
7.1.2 HTTP請求解析 118
7.1.3 HTTP請求處理與響應 120
7.2 HTTP服務初始化 123
7.2.1 模塊初始化 123
7.2.2 事件初始化 126
7.2.3 HTTP會話建立 128
7.3 HTTP請求解析 130
7.3.1 基礎結(jié)構(gòu)體 131
7.3.2 接收請求流程 135
7.3.3 解析請求行 137
7.3.4 解析請求頭 143
7.4 HTTP請求處理 148
7.4.1 多階段劃分 148
7.4.2 11個階段初始化 153
7.4.3 處理HTTP請求 155
7.4.4 處理請求體 169
7.5 HTTP請求響應 177
7.5.1 過濾模塊 177
7.5.2 發(fā)送HTTP響應 182
7.5.3 結(jié)束HTTP響應 190
7.6 本章小結(jié) 197
第8章 Upstream機制 198
8.1 Upstream簡介 198
8.2 初始化Upstream 200
8.3 與上游建立連接 205
8.4 發(fā)送請求到上游 208
8.5 處理上游響應頭 210
8.6 處理上游響應體 213
8.7 結(jié)束請求 217
8.8 重試機制 219
8.9 長連接 220
8.10 FastCGI模塊 225
8.10.1 FastCGI協(xié)議簡介 225
8.10.2 FastCGI通信流程 226
8.10.3 Nginx FastCGI 227
8.11 本章小結(jié) 228
第9章 Event模塊實現(xiàn) 229
9.1 基礎知識及相關配置項介紹 230
9.1.1 基本概念 230
9.1.2 基本網(wǎng)絡模型 230
9.1.3 epoll網(wǎng)絡模型 231
9.1.4 Event模塊相關配置項介紹 234
9.2 Nginx事件模型 234
9.2.1 文件事件 235
9.2.2 時間事件 235
9.2.3 進程池 237
9.2.4 監(jiān)聽池 237
9.2.5 連接池 238
9.2.6 事件池 240
9.2.7 Event模塊初始化過程 244
9.2.8 請求處理流程 257
9.3 Nginx的驚群處理 262
9.4 Nginx的陳舊事件處理 264
9.5 本章小結(jié) 266
第10章 其他模塊 267
10.1 負載均衡模塊 267
10.1.1 Nginx負載均衡算法簡介 267
10.1.2 Nginx負載均衡配置指令 268
10.1.3 Nginx負載均衡算法實現(xiàn) 270
10.2 限流模塊 276
10.2.1 常見限流算法 276
10.2.2 Nginx限流配置 277
10.2.3 限流實現(xiàn)原理 278
10.3 日志模塊 287
10.3.1 日志模塊配置指令 288
10.3.2 日志模塊實現(xiàn)原理 290
10.4 本章小結(jié) 295
第11章 跨平臺實現(xiàn) 296
11.1 configure實現(xiàn)詳解 296
11.2 跨平臺的原子操作和鎖 304
11.3 信號量 311
11.4 信號和進程管理 315
11.5 共享內(nèi)存 322
11.6 本章小結(jié) 325
第12章 基于Nginx的RTMP直播服務實現(xiàn) 326
12.1 Nginx-RTMP簡介 326
12.2 握手 328
12.3 分塊 331
12.4 Nginx-RTMP模塊 335
12.5 中繼模塊 342
12.6 本章小結(jié) 347