目錄
第0章 導讀 1
0.1 關於本書 1
0.2 讀者對象 2
0.3 讀者要求 3
0.4 運行環境 3
0.5 本書的結構 4
0.6 如何閱讀本書 6
0.7 本書的源碼 6
第1章 Nginx入門 7
1.1 關於Nginx 7
1.1.1 曆史 8
1.1.2 特點 8
1.1.3 進程模型 9
1.1.4 版本 10
1.2 安裝Nginx 11
1.2.1 準備工作 11
1.2.2 快速安裝 11
1.2.3 運行命令 12
1.2.4 驗證安裝 13
1.2.5 定製安裝 14
1.3 配置Nginx 15
1.3.1 配置文件格式 16
1.3.2 進程配置 17
1.3.3 運行日誌配置 18
1.3.4 http配置 18
1.3.5 server配置 19
1.3.6 location配置 20
1.3.7 文件訪問配置 21
1.3.8 upstream配置 22
1.3.9 變量 22
1.4 總結 24
第2章 Nginx開發準備 25
2.1 開發環境 25
2.1.1 C++標準 25
2.1.2 Boost程序庫 26
2.2 Nginx的目錄結構 26
2.3 Nginx源碼的特點 27
2.3.1 代碼風格 28
2.3.2 代碼優化 28
2.3.3 麵嚮對象思想 28
2.4 在Nginx裏使用C++ 29
2.4.1 實現原則 29
2.4.2 代碼風格 29
2.4.3 編譯腳本 30
2.5 基本的C++包裝類 32
2.5.1 類定義 32
2.5.2 構造和析構 33
2.5.3 成員函數 33
2.6 總結 34
第3章 Nginx基礎設施 35
3.1 頭文件 35
3.2 整數類型 36
3.2.1 標準整數類型 36
3.2.2 自定義整數類型 36
3.2.3 無效值 37
3.2.4 C++封裝 38
3.3 錯誤處理 41
3.3.1 錯誤碼定義 41
3.3.2 C++異常 41
3.4 內存池 44
3.4.1 結構定義 44
3.4.2 操作函數 45
3.4.3 C++封裝 45
3.4.4 清理機製 48
3.4.5 C++內存分配器 50
3.5 字符串 52
3.5.1 結構定義 52
3.5.2 操作函數 53
3.5.3 C++封裝 55
3.6 時間與日期 58
3.6.1 時間結構定義 58
3.6.2 時間操作函數 58
3.6.3 日期結構定義 59
3.6.4 日期操作函數 60
3.6.5 C++封裝時間 61
3.6.6 C++封裝日期 62
3.7 運行日誌 64
3.7.1 結構定義 65
3.7.2 操作函數 65
3.7.3 C++封裝 66
3.8 總結 68
第4章 Nginx高級數據結構 71
4.1 動態數組 71
4.1.1 結構定義 71
4.1.2 操作函數 73
4.1.3 C++封裝 73
4.2 單嚮鏈錶 76
4.2.1 結構定義 77
4.2.2 操作函數 78
4.2.3 C++迭代器 79
4.2.4 C++封裝鏈錶 81
4.3 雙端隊列 84
4.3.1 結構定義 84
4.3.2 操作函數 85
4.3.3 C++節點 87
4.3.4 C++迭代器 89
4.3.5 C++封裝隊列 90
4.4 緩衝區 95
4.4.1 結構定義 95
4.4.2 操作函數 97
4.4.3 C++封裝 98
4.5 數據塊鏈 100
4.5.1 結構定義 100
4.5.2 操作函數 101
4.5.3 C++節點 101
4.5.4 C++迭代器 103
4.5.5 C++封裝數據塊鏈 105
4.6 鍵值對 107
4.6.1 簡單鍵值對 107
4.6.2 散列錶鍵值對 107
4.7 總結 108
第5章 Nginx開發綜述 111
5.1 最簡單的Nginx模塊 111
5.1.1 模塊設計 112
5.1.2 配置解析 112
5.1.3 處理函數 114
5.1.4 模塊集成 116
5.1.5 編譯腳本和命令 117
5.1.6 測試驗證 118
5.2 Nginx開發基本流程 119
5.2.1 設計 119
5.2.2 開發 119
5.2.3 編譯 120
5.2.4 測試驗證 120
5.2.5 調優 121
5.3 Nginx的模塊 121
5.3.1 模塊的數據結構 121
5.3.2 模塊的種類 123
5.3.3 http模塊 124
5.3.4 模塊的類圖 124
5.3.5 模塊的組織形式 125
5.4 Nginx的配置 127
5.4.1 結構定義 128
5.4.2 配置解析的基本流程 131
5.4.3 配置數據的存儲模型 133
5.4.4 訪問配置數據 138
5.4.5 確定配置數據的位置 138
5.4.6 配置解析函數 140
5.4.7 配置數據的閤並 141
5.4.8 配置指令的類型 142
5.5 Nginx模塊源碼分析 143
5.5.1 ngx_core_module 143
5.5.2 ngx_errlog_module 146
5.6 Nginx的編譯腳本 147
5.6.1 運行機製 147
5.6.2 使用的變量 148
5.7 C++封裝模塊信息 149
5.7.1 NgxModuleConfig 149
5.7.2 NgxModule 153
5.8 C++封裝配置解析 155
5.8.1 NgxCommand 155
5.8.2 NgxTake 155
5.8.3 NGX_MODULE_NULL 157
5.9 C++開發Nginx模塊 158
5.9.1 C++模塊的基本組成 158
5.9.2 配置信息類 159
5.9.3 業務邏輯類 160
5.9.4 模塊集成類 162
5.9.5 實現源文件 164
5.9.6 增加更多功能 164
5.10 總結 165
第6章 Nginx HTTP框架綜述 169
6.1 HTTP框架簡介 169
6.1.1 模塊分類 169
6.1.2 處理流程 170
6.1.3 請求結構體 172
6.1.4 請求的處理階段 173
6.1.5 請求的環境數據 175
6.2 HTTP處理引擎 176
6.2.1 處理函數原型 176
6.2.2 處理函數的存儲方式 176
6.2.3 內容處理函數 177
6.2.4 引擎的數據結構 178
6.2.5 引擎的初始化 179
6.2.6 引擎的運行機製 181
6.2.7 日誌階段的處理 182
6.3 HTTP過濾引擎 183
6.3.1 過濾函數原型 183
6.3.2 過濾函數鏈錶 184
6.3.3 過濾函數的順序 185
6.3.4 過濾鏈錶的運行機製 187
6.3.5 請求體過濾 188
6.4 Nginx模塊源碼分析 188
6.4.1 ngx_http_static_module 188
6.4.2 ngx_http_not_modified_filter_ module 189
6.5 C++封裝 190
6.5.1 NgxModuleCtx 191
6.5.2 NgxHttpCoreModule 193
6.5.3 NgxFilter 195
6.6 總結 197
第7章 Nginx HTTP請求處理 199
7.1 HTTP狀態碼 199
7.2 請求結構體 200
7.3 請求行 201
7.3.1 請求方法 201
7.3.2 協議版本號 202
7.3.3 資源標識符 202
7.4 請求頭 203
7.5 請求體 204
7.5.1 結構定義 205
7.5.2 操作函數 205
7.6 響應頭 206
7.6.1 結構定義 206
7.6.2 操作函數 207
7.7 響應體 207
7.8 C++封裝 208
7.8.1 NgxHeaders 208
7.8.2 NgxRequestBody 211
7.8.3 NgxRequest 212
7.8.4 NgxResponse 213
7.9 開發HTTP處理模塊 216
7.9.1 模塊設計 216
7.9.2 配置信息類 217
7.9.3 業務邏輯類 217
7.9.4 模塊集成類 219
7.9.5 實現源文件 221
7.9.6 編譯腳本 221
7.9.7 測試驗證 221
7.10 開發HTTP過濾模塊 222
7.10.1 模塊設計 222
7.10.2 配置信息類 222
7.10.3 環境數據類 223
7.10.4 業務邏輯類 223
7.10.5 模塊集成類 227
7.10.6 實現源文件 228
7.10.7 編譯腳本 228
7.10.8 測試驗證 228
7.11 總結 229
第8章 Nginx HTTP請求轉發 231
8.1 upstream框架簡介 231
8.1.1 工作原理 232
8.1.2 請求結構體 233
8.1.3 上遊結構體 234
8.1.4 上遊配置參數 236
8.2 upstream運行機製 237
8.2.1 迴調函數 237
8.2.2 初始化upstream 239
8.2.3 設置upstream 239
8.2.4 啓動upstream 241
8.2.5 處理upstream數據 241
8.3 load-balance運行機製 242
8.3.1 結構定義 243
8.3.2 初始化模塊入口 247
8.3.3 初始化IP地址列錶 248
8.3.4 初始化算法 250
8.3.5 執行算法 251
8.4 Nginx模塊源碼分析 251
8.4.1 ngx_http_memcached_module 251
8.4.2 ngx_http_upstream_ip_hash_ module 254
8.5 C++封裝 257
8.5.1 NgxUpstream 257
8.5.2 NgxUpstreamHelper 259
8.5.3 NgxHttpUpstreamModule 261
8.5.4 NgxLoadBalance 263
8.6 開發upstream模塊 264
8.6.1 模塊設計 264
8.6.2 配置信息類 264
8.6.3 業務邏輯類 265
8.6.4 模塊集成類 268
8.6.5 實現源文件 269
8.6.6 編譯腳本 269
8.6.7 測試驗證 269
8.7 開發load-balance模塊 270
8.7.1 模塊設計 271
8.7.2 配置信息類 271
8.7.3 業務邏輯類 271
8.7.4 模塊集成類 273
8.7.5 實現源文件 275
8.7.6 編譯腳本 275
8.7.7 測試驗證 275
8.8 總結 276
第9章 Nginx HTTP子請求 277
9.1 子請求簡介 277
9.1.1 工作原理 278
9.1.2 請求結構體 279
9.1.3 迴調函數 280
9.1.4 待處理請求鏈錶 282
9.1.5 子請求存儲結構 282
9.2 子請求運行機製 283
9.2.1 創建子請求 283
9.2.2 處理引擎 287
9.2.3 數據整理 288
9.3 C++封裝 290
9.3.1 NgxSubRequestHandler 290
9.3.2 NgxSubRequest 292
9.4 數據迴傳模塊 293
9.4.1 模塊設計 293
9.4.2 環境數據類 293
9.4.3 業務邏輯類 295
9.4.4 模塊集成類 297
9.4.5 編譯腳本 298
9.5 在模塊裏使用子請求 299
9.5.1 模塊設計 299
9.5.2 配置信息類 299
9.5.3 業務邏輯類 300
9.5.4 測試驗證 303
9.6 總結 304
第10章 Nginx變量 305
10.1 結構定義 305
10.1.1 變量值 305
10.1.2 變量訪問對象 306
10.1.3 變量的存儲 307
10.1.4 請求結構體 307
10.2 運行機製 308
10.2.1 注冊變量 308
10.2.2 獲取變量 309
10.3 C++封裝 310
10.3.1 NgxVariableValue 310
10.3.2 NgxVariable 311
10.3.3 NgxVariables 312
10.3.4 NgxVarManager 313
10.3.5 NgxVariableValueProxy 314
10.4 在模塊裏使用變量 315
10.4.1 添加變量 316
10.4.2 讀寫變量 317
10.5 總結 317
第11章 Nginx輔助設施 319
11.1 摘要算法 319
11.1.1 MD5 319
11.1.2 SHA-1 320
11.1.3 MurmurHash 321
11.1.4 C++封裝 321
11.2 編碼和解碼 324
11.2.1 CRC校驗 324
11.2.2 Base64編碼解碼 325
11.2.3 URI編碼解碼 326
11.2.4 HTML和JSON編碼 327
11.3 正則錶達式 327
11.4 共享內存 328
11.4.1 結構定義 328
11.4.2 操作函數 329
11.4.3 C++共享內存 329
11.5 定時器 331
11.5.1 結構定義 331
11.5.2 操作函數 332
11.5.3 C++定時器事件 332
11.5.4 C++定時器工廠 333
11.6 總結 335
第12章 Nginx與設計模式 337
12.1 設計模式簡介 337
12.2 框架級彆的模式 337
12.3 業務級彆的模式 339
12.4 代碼級彆的模式 340
12.5 總結 342
第13章 結束語 343
13.1 本書的遺憾 343
13.2 下一步 344
13.3 臨彆贈言 345
附錄A 推薦書目 347
附錄B GDB調試簡介 349
附錄C Nginx的字符串格式化 351
附錄D Nginx裏的void*變量 353
附錄E Nginx C++模塊簡介 355
附錄F Nginx Lua模塊簡介 357
· · · · · · (
收起)