深入理解Nginx:模組開發與架構解析
讀書筆記
第一部分
Nginx能幫我們做什麼
第1章 研究Nginx前的準備工作
1.1Nginx是什麼
1.2為什麼選擇Nginx
1.3準備工作
1.4編譯安裝Nginx
1.5configure詳解
1.6Nginx的命令列控制
1.7小結
第2章 Nginx的配置
2.1執行中的Nginx程序間的關係
2.2Nginx配置的通用語法
2.3Nginx服務的基本配置
2.4用HTTP核心模組配置一個靜態Web伺服器
2.5用HTTP proxy module配置一個反向代理伺服器
2.6小結
第二部分 如何編寫HTTP模組
第3章 開發一個簡單的HTTP模組
3.1如何呼叫HTTP模組
3.2準備工作
3.3如何將自己的HTTP模組編譯進Nginx
3.4HTTP模組的資料結構
3.5定義自己的HTTP模組
3.6處理使用者請求
3.7傳送響應
3.8將磁碟檔案作為包體傳送
3.9用C++語言編寫HTTP模組
3.10小結
第4章 配置、error日誌和請求上下文
4.1http配置項的使用場景
4.2怎樣使用http配置
4.3HTTP配置模型
4.4error日誌的用法
4.5請求的上下文
4.6小結
第5章 訪問第三方服務
5.1upstream的使用方式
5.2回撥方法的執行場景
5.3使用upstream的示例
5.4subrequest的使用方式
5.5subrequest執行過程中的主要場景
5.6subrequest使用的例子
5.7小結
第6章 開發一個簡單的HTTP過濾模組
6.1過濾模組的意義
6.2過濾模組的呼叫順序
6.3HTTP過濾模組的開發步驟
6.4HTTP過濾模組的簡單例子
6.5小結
第7章 Nginx提供的高階資料結構
7.1Nginx提供的高階資料結構概述
7.2ngx_queue_t雙向連結串列
7.3ngx_array_t動態陣列
7.4ngx_list_t單向連結串列
7.5ngx_rbtree_t紅黑樹
7.6ngx_radix_tree_t基數樹
7.7支援萬用字元的散列表
7.8小結
第三部分 深入Nginx
第8章 Nginx基礎架構
8.1Web伺服器設計中的關鍵約束
8.2Nginx的架構設計
8.3Nginx框架中的核心結構體ngx_cycle_t
8.4Nginx啟動時框架的處理流程
8.5worker程序是如何工作的
8.6master程序是如何工作的
8.7ngx_pool_t記憶體池
8.8小結
第9章 事件模組
9.1事件處理框架概述
9.2Nginx事件的定義
9.3Nginx連線的定義
9.4ngx_events_module核心模組
9.5ngx_event_core_module事件模組
9.6epoll事件驅動模組
9.7定時器事件
9.8事件驅動框架的處理流程
9.9檔案的非同步I/O
9.10TCP協議與Nginx
9.11小結
第10章 HTTP框架的初始化
10.1HTTP框架概述
10.2管理HTTP模組的配置項
10.3監聽埠的管理
10.4server的快速檢索
10.5location的快速檢索
10.6HTTP請求的11個處理階段
10.7HTTP框架的初始化流程
10.8小結
第11章 HTTP框架的執行流程
11.1HTTP框架執行流程概述
11.2新連線建立時的行為
11.3第一次可讀事件的處理
11.4接收HTTP請求行
11.5接收HTTP頭部
11.6處理HTTP請求
11.7subrequest與post請求
11.8處理HTTP包體
11.9傳送HTTP響應
11.10結束HTTP請求
11.11小結
第12章 upstream機制的設計與實現
12.1upstream機制概述
12.2啟動upstream
12.3與上游伺服器建立連線
12.4傳送請求到上游伺服器
12.5接收上游伺服器的響應頭部
12.6不轉發響應時的處理流程
12.7以下游網速優先來轉發響應
12.8以上游網速優先來轉發響應
12.9結束upstream請求
12.10小結
第13章 郵件代理模組
13.1郵件代理伺服器的功能
13.2郵件模組的處理框架
13.3初始化請求
13.4接收並解析客戶端請求
13.5郵件認證
13.6與上游郵件伺服器間的認證互動
13.7透傳上游郵件伺服器與客戶端間的流
13.8小結
第14章 程序間的通訊機制
14.1概述
14.2共享記憶體
14.3原子操作
14.4Nginx頻道
14.5訊號
14.6訊號量
14.7檔案鎖
14.8互斥鎖
14.9小結
第15章 變數
15.1使用內部變數開發模組
15.2內部變數工作原理
15.3定義內部變數
15.4外部變數與指令碼引擎
15.5小結
第16章 slab共享記憶體
16.1操作slab共享記憶體的方法
16.2使用slab共享記憶體池的例子
16.3slab記憶體管理的實現原理
16.4小結