Nginx 底層設計與源碼分析

聶鬆鬆 趙 禹 施洪寶 等著

  • 出版商: 機械工業
  • 出版日期: 2021-06-01
  • 售價: $594
  • 貴賓價: 9.5$564
  • 語言: 簡體中文
  • 頁數: 360
  • 裝訂: 平裝
  • ISBN: 7111682742
  • ISBN-13: 9787111682745
  • 立即出貨

買這商品的人也買了...

商品描述

本書詳解了Nginx架構、執行流程、模塊實現與數據結構,剖析了Nginx源碼設計精髓與應用。第1~2章介紹Nginx編譯安裝、基礎架構與設計理念,涵蓋源碼結構、進程模型等,讓讀者對Nginx有整體性瞭解。第3章從內存池、共享內存展開介紹Nginx的內存管理與使用。第4章分析Nginx的數據結構,即字符串、數組、鏈表、隊列、散列、紅黑樹、基數樹的數據結構和算法。第5章詳細介紹main配置塊、events配置塊與http配置塊,呈現Nginx配置解析的全過程。第6章完整地介紹了Nginx進程管理,涵蓋進程模式、master進程、worker進程以及進程間通信機制。第7章詳細分析HTTP模塊及其處理的11個階段,如模塊初始化流程、請求解析、請求響應等。第8章介紹了Upstream機制,涵蓋初始化、上下游連接建立、長連接等,著重介紹了FastCGI通信流程。第9章詳細介紹Event模塊的實現以及Nginx中的驚群處理。第10章介紹Nginx的負載均衡、限流、日誌等模塊實現。第11章介紹跨平臺實現,涵蓋編譯過程、共享內存等。第12章介紹Nginx的RTMP直播服務實現,著重介紹RTMP包協議與中繼模塊實現。

通過閱讀本書,你將:
  瞭解Nginx的基礎數據結構與算法;
  瞭解Nginx的RTMP在直播服務中的實現;
  瞭解Nginx跨平臺編譯的源碼實現原理;
  瞭解Nginx的內存管理與進程機制的源碼實現;
  瞭解Nginx的事件模型與配置的源碼實現;
  瞭解Nginx的HTTP模塊與FastCGI模塊的實現機制。

作者簡介

聶松松
好未來學而思網校學習研发直播系統後端負責人,負責網校核心直播系統開发和架構工作,
擁有多年音視頻及流媒體相關工作經驗,精通Nginx、ffmpeg相關技術棧。

趙禹好未來後端資深開发工程師,曾參與自主創業。
目前負責雲容器平台Kubernetes組件開发,熟悉PHP、Nginx、Redis、MySQL等源碼實現,樂於鉆研技術。

施洪寶
好未來後端開发專家,對Redis、Nginx、MySQL等開源軟件有較深的理解,
熟悉C/C++、Go語言開发,樂於鉆研技術,合著有《Redis5設計與源碼分析》。

目錄大綱

推薦序
前 言

第1章 Nginx源碼與編譯安裝 1
1.1 Nginx優勢與4種應用示例 1
1.2 Nginx源碼結構 4
1.3 Nginx編譯安裝 5
1.4 本章小結 6

第2章 Nginx基礎架構與設計理念 7
2.1 Nginx進程模型 7
2.2 Nginx模塊化設計 9
2.2.1 模塊分類 9
2.2.2 模塊接口 10
2.2.3 模塊分工 12
2.3 Nginx事件驅動 13
2.4 本章小結 14

第3章 Nginx內存管理 15
3.1 Nginx內存管理簡介 15
3.2 Nginx內存池 16
3.2.1 內存池結構 16
3.2.2 申請內存 17
3.2.3 釋放內存 20
3.3 Nginx共享內存 22
3.3.1 共享內存的創建及銷毀 22
3.3.2 互斥鎖 23
3.3.3 共享內存管理 25
3.3.4 共享內存使用 30
3.4 本章小結 31

第4章 基本數據結構 32
4.1 字符串 32
4.2 數組 33
4.3 鏈表 35
4.4 隊列 37
4.5 散列 42
4.6 紅黑樹 46
4.7 基數樹 56
4.8 本章小結 59

第5章 配置文件解析 60
5.1 配置文件簡介 60
5.2 主函數ngx_conf_parse 63
5.3 解析main配置 65
5.3.1 創建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 本章小結 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 本章小結 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 基礎結構體 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 發送HTTP響應 182
7.5.3 結束HTTP響應 190
7.6 本章小結 197

第8章 Upstream機制 198
8.1 Upstream簡介 198
8.2 初始化Upstream 200
8.3 與上游建立連接 205
8.4 發送請求到上游 208
8.5 處理上游響應頭 210
8.6 處理上游響應體 213
8.7 結束請求 217
8.8 重試機制 219
8.9 長連接 220
8.10 FastCGI模塊 225
8.10.1 FastCGI協議簡介 225
8.10.2 FastCGI通信流程 226
8.10.3 Nginx FastCGI 227
8.11 本章小結 228

第9章 Event模塊實現 229
9.1 基礎知識及相關配置項介紹 230
9.1.1 基本概念 230
9.1.2 基本網絡模型 230
9.1.3 epoll網絡模型 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 監聽池 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 本章小結 266


第10章 其他模塊 267
10.1 負載均衡模塊 267
10.1.1  Nginx負載均衡算法簡介 267
10.1.2 Nginx負載均衡配置指令 268
10.1.3 Nginx負載均衡算法實現 270
10.2 限流模塊 276
10.2.1 常見限流算法 276
10.2.2 Nginx限流配置 277
10.2.3 限流實現原理 278
10.3 日誌模塊 287
10.3.1 日誌模塊配置指令 288
10.3.2 日誌模塊實現原理 290
10.4 本章小結 295

第11章 跨平臺實現 296
11.1 configure實現詳解 296
11.2 跨平臺的原子操作和鎖 304
11.3 信號量 311
11.4 信號和進程管理 315
11.5 共享內存 322
11.6 本章小結 325

第12章 基於Nginx的RTMP直播服務實現 326
12.1 Nginx-RTMP簡介 326
12.2 握手 328
12.3 分塊 331
12.4 Nginx-RTMP模塊 335
12.5 中繼模塊 342
12.6 本章小結 347