內容提要
Nginx是著名的Web伺服器,性能優異,運行效率遠超傳統的Apache、Tomcat,廣泛套用於國內外諸多頂級網際網路公司。
Nginx的一個突出特點是其靈活優秀的模組化架構,可以在不修改核心的前提下增加任意功能,自2004年發布至今,已經擁有百餘個官方及非官方的功能模組(如proxy、mysql、redis、rtmp、lua等),使得Nginx成長為了一個近乎“全能”的伺服器軟體。
Nginx功能強大,架構複雜,學習、維護和開發的門檻較高。為了幫助讀者跨越這一障礙,《Nginx完全開發指南:使用C、C++和OpenResty》深入最新的Nginx源碼(Stable 1.12.0),詳細剖析了模組體系、動態外掛程式、功能框架、進程模型、事件驅動、執行緒池、TCP/UDP/HTTP處理等Nginx核心運行機制,在此基礎上講解如何使用C、C++、Lua、nginScript等語言來增強擴展Nginx,讓任何人都能夠便捷、輕鬆地開發和定製Nginx,進而套用到自己的實際工作中,創造出更多的價值。
《Nginx完全開發指南:使用C、C++和OpenResty》結構嚴謹、脈絡清晰、論述精確、詳略得當、圖文並茂,值得廣大軟體開發工程師、系統運維工程師和編程愛好者擁有。
目錄
第0章 導讀 1
0.1 關於本書 1
0.2 讀者對象 2
0.3 讀者要求 3
0.4 運行環境 4
0.5 本書的結構 4
0.6 如何閱讀本書 7
0.7 本書的源碼 8
第1章 Nginx入門 9
1.1 關於Nginx 9
1.2 安裝Nginx 13
1.3 配置Nginx 19
1.4 總結 30
第2章 Nginx開發準備 31
2.1 開發環境 31
2.2 目錄結構 32
2.3 源碼特點 34
2.4 使用C++ 35
2.5 C++包裝類 38
2.6 總結 40
第3章 Nginx基礎設施 41
3.1 頭檔案 41
3.2 整數類型 42
3.3 錯誤處理 47
3.4 記憶體池 50
3.5 字元串 58
3.6 時間與日期 64
3.7 運行日誌 70
3.8 總結 74
第4章 Nginx高級數據結構 77
4.1 動態數組 77
4.2 單向鍊表 83
4.3 雙端佇列 90
4.4 紅黑樹 101
4.5 緩衝區 108
4.6 數據塊鏈 113
4.7 鍵值對 120
4.8 總結 121
第5章 Nginx開發綜述 123
5.1 最簡單的模組 123
5.2 開發基本流程 131
5.3 編譯腳本 134
5.4 總結 137
第6章 Nginx模組體系 139
6.1 模組架構 139
6.2 配置解析 152
6.3 源碼分析 168
6.4 C++封裝 172
6.5 C++開發模組 180
6.6 總結 187
第7章 Nginx HTTP框架綜述 191
7.1 框架簡介 191
7.2 處理引擎 198
7.3 過濾引擎 205
7.4 源碼分析 211
7.5 C++封裝 213
7.6 總結 219
第8章 Nginx HTTP請求處理 221
8.1 狀態碼 221
8.2 請求結構體 222
8.3 請求行 223
8.4 請求頭 225
8.5 請求體 226
8.6 回響頭 227
8.7 回響體 229
8.8 源碼分析 229
8.9 C++封裝 232
8.10 開發handler模組 241
8.11 開發filter模組 246
8.12 總結 253
第9章 Nginx HTTP請求轉發 255
9.1 框架簡介 255
9.2 請求轉發機制 261
9.3 負載均衡機制 266
9.4 源碼分析 275
9.5 C++封裝 281
9.6 開發upstream模組 288
9.7 開發load-balance模組 294
9.8 總結 299
第10章 Nginx HTTP子請求 301
10.1 子請求簡介 301
10.2 子請求運行機制 307
10.3 C++封裝 314
10.4 數據回傳模組 317
10.5 在模組里使用子請求 323
10.6 總結 328
第11章 Nginx變數 329
11.1 結構定義 329
11.2 運行機制 332
11.3 複雜變數 334
11.4 C++封裝 335
11.5 在模組里使用變數 341
11.6 在模組里使用複雜變數 343
11.7 總結 345
第12章 Nginx輔助設施 347
12.1 摘要算法 347
12.2 編碼和解碼 352
12.3 正則表達式 356
12.4 共享記憶體 356
12.5 總結 359
第13章 Nginx進程機制 361
13.1 基本系統調用 361
13.2 進程系統調用 362
13.3 信號系統調用 364
13.4 結構定義 365
13.5 全局變數 368
13.6 啟動過程 370
13.7 信號處理 377
13.8 單進程模式 379
13.9 多進程模式 382
13.10 總結 390
第14章 Nginx事件機制 393
14.1 基本系統調用 393
14.2 socket系統調用 395
14.3 epoll系統調用 399
14.4 結構定義 403
14.5 定時器 415
14.6 模組體系 419
14.7 全局變數 425
14.8 運行機制 427
14.9 總結 452
第15章 Nginx多執行緒機制 455
15.1 eventfd系統調用 455
15.2 pthread系統調用 456
15.3 結構定義 457
15.4 事件通知 460
15.5 運行機制 463
15.6 在模組里使用多執行緒 469
15.7 總結 474
第16章 Nginx Stream機制 477
16.1 模組體系 477
16.2 監聽連線埠 483
16.3 處理引擎 491
16.4 過濾引擎 495
16.5 運行機制 496
16.6 開發stream模組 507
16.7 總結 514
第17章 Nginx HTTP機制 517
17.1 結構定義 517
17.2 初始化連線 519
17.3 執行引擎 528
17.4 處理請求體 534
17.5 傳送數據 540
17.6 結束請求 543
17.7 總結 548
第18章 Nginx與設計模式 551
18.1 設計模式簡介 551
18.2 框架級別的模式 551
18.3 業務級別的模式 553
18.4 代碼級別的模式 554
18.5 總結 556
第19章 OpenResty開發 557
19.1 簡介 557
19.2 Lua語言 566
19.3 LuaJIT 577
19.4 Lua模組 581
19.5 功能接口 585
19.6 套用實例 594
19.7 Stream Lua模組 598
19.8 lua-resty庫 601
19.9 總結 603
第20章 結束語 605
20.1 本書的遺憾 605
20.2 下一步 605
20.3 臨別贈言 606
附錄A 推薦書目 607
附錄B GDB調試簡介 609
附錄C Nginx C++模組簡介 611
附錄D Nginx的字元串格式化 613
附錄E nginScript簡介 615