《深入理解Nginx:模組開發與架構解析(第2版)》是2016年機械工業出版社出版的圖書。
基本介紹
- 中文名:深入理解Nginx:模組開發與架構解析(第2版)
- 出版時間:2016年2月1日
- 出版社:機械工業出版社
- ISBN:9787111526254
內容簡介,圖書目錄,
內容簡介
本書致力於說明開發Nginx模組的必備知識,第1版發行以後,深受廣大讀者的喜愛。然而由於Nginx功能繁多且性能強大,以致必須了解的基本技能也很龐雜,而第1版成書匆忙,缺失了幾個進階的技巧描述,因此第2版在此基礎上進行了完善。書中首先通過介紹官方Nginx的基本用法和配置規則,幫助讀者了解一般Nginx模組的用法,然後重點介紹了如何開發HTTP模組(含HTTP過濾模組)來得到定製化的Nginx,其中包括開發一個功能複雜的模組所需要了解的各種知識,並對記憶體池的實現細節及TCP協定進行了詳細介紹;接著,綜合Nginx框架代碼分析了Nginx架構的設計理念和技巧,此外,還新增了如何在模組中支持HTTP變數,以及與slab共享記憶體等相關的內容,相信通過完善,可進一步幫助讀者更好地開發出功能豐富、性能一流的Nginx模組。
本書包括四大部分:Nginx能幫我做什麼;如何編寫一個定製的httpmodule;深入Nginx;實戰。第一部分針對初級讀者,介紹Nginx關於獲取編譯運行的基本知識。第二部分針對中級讀者,以一個例子為主線,告訴讀者如何開發一個http模組,這部分讀者不需要深入了解Nginx的細節,只需要知道如何實現一個基本的http模組。第三部分針對高級讀者,這是本書的重點,徹底解析Nginx架構,深入探討Nginx各種設計的目的與意義,並對第二部分使用到的一些特性進行代碼設計實現上的探索。讀者讀完本部分,會對整個Nginx架構有清晰的認識,可以編寫各種模組(不局限於http模組)插入到Nginx中,從而定製自己的Nginx。第四部分針對中高級讀者,以Tengine的開源模組為例,幫助讀者從實戰角度理解第二、三部分描述的內容。
圖書目錄
前 言
第一部分 Nginx能幫我們做什麼
第1章 研究Nginx前的準備工作 2
1.1 Nginx是什麼 2
1.2 為什麼選擇Nginx 5
1.3 準備工作 7
1.3.1 Linux作業系統 7
1.3.2 使用Nginx的必備軟體 7
1.3.3 磁碟目錄 8
1.3.4 Linux核心參數的最佳化 9
1.3.5 獲取Nginx源碼 10
1.4 編譯安裝Nginx 11
1.5 conf?igure詳解 11
1.5.1 conf?igure的命令參數 11
1.5.2 conf?igure執行流程 18
1.5.3 conf?igure生成的檔案 21
1.6 Nginx的命令行控制 23
1.7 小結 27
第2章 Nginx的配置 28
2.1 運行中的Nginx進程間的關係 28
2.2 Nginx配置的通用語法 31
2.2.1 塊配置項 31
2.2.2 配置項的語法格式 32
2.2.3 配置項的注釋 33
2.2.4 配置項的單位 33
2.2.5 在配置中使用變數 33
2.3 Nginx服務的基本配置 34
2.3.1 用於調試進程和定位問題的配置項 34
2.3.2 正常運行的配置項 36
2.3.3 最佳化性能的配置項 37
2.3.4 事件類配置項 39
2.4 用HTTP核心模組配置一個靜態Web伺服器 40
2.4.1 虛擬主機與請求的分發 41
2.4.2 檔案路徑的定義 45
2.4.3 記憶體及磁碟資源的分配 47
2.4.4 網路連線的設定 49
2.4.5 MIME類型的設定 52
2.4.6 對客戶端請求的限制 53
2.4.7 檔案操作的最佳化 54
2.4.8 對客戶端請求的特殊處理 56
2.4.9 ngx_http_core_module模組提供的變數 57
2.5 用HTTP proxy module配置一個反向代理伺服器 59
2.5.1 負載均衡的基本配置 61
2.5.2 反向代理的基本配置 63
2.6 小結 66
第二部分 如何編寫HTTP模組
第3章 開發一個簡單的HTTP模組 68
3.1 如何調用HTTP模組 68
3.2 準備工作 70
3.2.1 整型的封裝 71
3.2.2 ngx_str_t數據結構 71
3.2.3 ngx_list_t數據結構 71
3.2.4 ngx_table_elt_t數據結構 75
3.2.5 ngx_buf_t數據結構 75
3.2.6 ngx_chain_t數據結構 77
3.3 如何將自己的HTTP模組編譯進Nginx 77
3.3.1 conf?ig檔案的寫法 77
3.3.2 利用conf?igure腳本將定製的模組加入到Nginx中 78
3.3.3 直接修改Makef?ile檔案 81
3.4 HTTP模組的數據結構 82
3.5 定義自己的HTTP模組 86
3.6 處理用戶請求 89
3.6.1 處理方法的返回值 89
3.6.2 獲取URI和參數 92
3.6.3 獲取HTTP頭部 94
3.6.4 獲取HTTP包體 97
3.7 傳送回響 99
3.7.1 傳送HTTP頭部 99
3.7.2 將記憶體中的字元串作為包體傳送 101
3.7.3 經典的“Hello World”示例 102
3.8 將磁碟檔案作為包體傳送 103
3.8.1 如何傳送磁碟中的檔案 104
3.8.2 清理檔案句柄 106
3.8.3 支持用戶多執行緒下載和斷點續傳 107
3.9 用C++語言編寫HTTP模組 108
3.9.1 編譯方式的修改 108
3.9.2 程式中的符號轉換 109
3.10 小結 110
第4章 配置、error日誌和請求上下文 111
4.1 http配置項的使用場景 111
4.2 怎樣使用http配置 113
4.2.1 分配用於保存配置參數的數據結構 113
4.2.2 設定配置項的解析方式 115
4.2.3 使用14種預設方法解析配置項 121
4.2.4 自定義配置項處理方法 131
4.2.5 合併配置項 133
4.3 HTTP配置模型 135
4.3.1 解析HTTP配置的流程 136
4.3.2 HTTP配置模型的記憶體布局 139
4.3.3 如何合併配置項 142
4.3.4 預設配置項處理方法的工作原理 144
4.4 error日誌的用法 145
4.5 請求的上下文 149
4.5.1 上下文與全異步Web伺服器的關係 149
4.5.2 如何使用HTTP上下文 151
4.5.3 HTTP框架如何維護上下文結構 152
4.6 小結 153
第5章 訪問第三方服務 154
5.1 upstream的使用方式 155
5.1.1 ngx_http_upstream_t結構體 158
5.1.2 設定upstream的限制性參數 159
5.1.3 設定需要訪問的第三方伺服器地址 160
5.1.4 設定回調方法 161
5.1.5 如何啟動upstream機制 161
5.2 回調方法的執行場景 162
5.2.1 create_request回調方法 162
5.2.2 reinit_request回調方法 164
5.2.3 f?inalize_request回調方法 165
……