內容簡介
本書全面介紹了當前Internet上流行的一款開放原始碼的Web伺服器——Nginx。全書一共分為四大部分,分別從入門、功能、實現和套用等四個方面對Nginx伺服器的知識進行完整闡述,從而滿足廣大讀者在套用Nginx伺服器時的普遍性需求。同時也深入剖析了Nginx伺服器的工作原理和實現技術,對其中使用到的數據結構和方法進行了詳細闡述,並且結合實際的套用情況給出了多個基於Nginx伺服器,同時還部署有其他典型伺服器的分散式網站架構部署配置。
本書特別適合於希望了解和掌握Nginx伺服器套用技術和實現技術的廣大教師、學生和電腦愛好者閱讀,對使用Nginx伺服器搭建Web伺服器架構或進行網路伺服器套用開發的技術人員尤其具有重要的閱讀和參考價值。
圖書目錄
第1章 Nginx初探 1
1.1 Nginx的歷史 1
1.2 常見伺服器產品介紹 2
1.2.1 Apache伺服器 2
1.2.2 Microsoft IIS 3
1.2.3 Tomcat伺服器 3
1.2.4 Lighttpd伺服器 4
1.2.5 Nginx誕生記 4
1.2.6 版本變更大事記 5
1.3 Nginx的功能特性 5
1.3.1 基本HTTP服務 6
1.3.2 高級HTTP服務 6
1.3.3 郵件代理服務 7
1.4 常用功能介紹 7
1.4.1 HTTP代理和反向代理 7
1.4.2 負載均衡 7
1.4.3 Web快取 8
1.5 本章小結 9
第2章 Nginx伺服器的安裝部署 10
2.1 如何獲取Nginx伺服器安裝檔案 10
2.1.1 獲取新版本的Nginx伺服器 11
2.1.2 獲取Nginx伺服器的歷史版本 11
2.2 安裝Nginx伺服器和基本配置 12
2.2.1 Windows版本的安裝 12
2.2.3 Linux版本的編譯和安裝:Nginx軟體的自動腳本 14
2.2.4 Linux版本的編譯和安裝:Nginx原始碼的編譯和安裝 18
2.3 Nginx服務的啟停控制 21
2.3.1 Nginx服務的信號控制 21
2.3.2 Nginx服務的啟動 22
2.3.3 Nginx服務的停止 23
2.3.4 Nginx服務的重啟 23
2.3.5 Nginx伺服器的升級 24
2.4 Nginx伺服器基礎配置指令 24
2.4.1 nginx.conf檔案的結構 25
2.4.2 配置運行Nginx伺服器用戶(組) 28
2.4.3 配置允許生成的worker process數 28
2.4.4 配置Nginx進程PID存放路徑 29
2.4.5 配置錯誤日誌的存放路徑 29
2.4.6 配置檔案的引入 30
2.4.7 設定網路連線的序列化 30
2.4.8 設定是否允許同時接收多個網路連線 30
2.4.9 事件驅動模型的選擇 30
2.4.10 配置最大連線數 31
2.4.11 定義MIME-Type 31
2.4.12 自定義服務日誌 32
2.4.13 配置允許sendfile方式傳輸檔案 33
2.4.14 配置連線逾時時間 33
2.4.15 單連線請求數上限 34
2.4.16 配置網路監聽 34
2.4.17 基於名稱的虛擬主機配置 35
2.4.18 基於IP的虛擬主機配置 36
2.4.19 配置location塊 38
2.4.20 配置請求的根目錄 39
2.4.21 更改location的URI 39
2.4.22 設定網站的默認首頁 40
2.4.23 設定網站的錯誤頁面 40
2.4.24 基於IP配置Nginx的訪問許可權 42
2.4.25 基於密碼配置Nginx的訪問許可權 43
2.5 Nginx伺服器基礎配置實例 43
2.5.1 測試myServer1的訪問 46
2.5.2 測試myServer2的訪問 46
2.6 本章小結 47
第3章 Nginx伺服器架構初探 48
3.1 模組化結構 48
3.1.1 什麼是“模組化設計” 48
3.1.2 Nginx模組化結構 49
3.2 Nginx伺服器的Web請求處理機制 54
3.2.1 多進程方式 54
3.2.2 多執行緒方式 55
3.2.3 異步方式 55
3.2.4 Nginx伺服器如何處理請求 56
3.2.5 Nginx伺服器的事件處理機制 57
3.3 Nginx伺服器的事件驅動模型 57
3.3.1 事件驅動模型概述 57
3.3.2 Nginx中的事件驅動模型 58
3.3.3 select庫 59
3.3.4 poll庫 59
3.3.5 epoll庫 60
3.3.6 rtsig模型 60
3.3.7 其他事件驅動模型 61
3.4 設計架構概覽 61
3.3.1 Nginx伺服器架構 62
3.3.2 Nginx伺服器的進程 63
3.3.3 進程互動 64
3.3.4 Run Loops事件處理循環模型 64
3.5 本章小結 65
第4章 Nginx伺服器的高級配置 67
4.1 針對IPv4的核心7個參數的配置最佳化 67
4.2 針對CPU的Nginx配置最佳化的2個指令 68
4.3 與網路連線相關的配置的4個指令 70
4.4 與事件驅動模型相關的配置的8個指令 71
4.5 本章小結 73
第5章 Nginx伺服器的Gzip壓縮 74
5.1 由ngx_http_gzip_module模組處理的9個指令 74
5.2 由ngx_http_gzip_static_module模組處理的指令 78
5.3 由ngx_http_gunzip_module模組處理的2個指令 79
5.4 Gzip壓縮功能的使用 80
5.4.1 Gzip壓縮功能綜合配置實例 80
5.4.2 Gzip壓縮功能與IE6瀏覽器運行腳本的兼容問題 82
5.4.3 Nginx與其他伺服器互動時產生的Gzip壓縮功能相關問題 83
5.5 本章小結 84
第6章 Nginx伺服器的Rewrite功能 85
6.1 Nginx後端伺服器組的配置的5個指令 85
6.2 Rewrite功能的配置 88
6.2.1 “地址重寫”與“地址轉發” 88
6.2.2 Rewrite規則 89
6.2.3 if指令 89
6.2.4 break指令 91
6.2.5 rewrite指令 92
6.2.6 rewrite_log指令 94
6.2.7 set指令 94
6.2.8 uninitialized_variable_warn
指令 94
6.2.9 Rewrite常用全局變數 94
6.3 Rewrite的使用 95
6.3.1 域名跳轉 95
6.3.2 域名鏡像 96
6.3.3 獨立域名 97
6.3.4 目錄自動添加“/” 98
6.3.5 目錄合併 99
6.3.6 防盜鏈 99
6.4 本章小結 101
第7章 Nginx伺服器的代理服務 102
7.1 正向代理與反向代理的概念 102
7.2 Nginx伺服器的正向代理服務 104
7.2.1 Nginx伺服器正向代理服務的配置的3個指令 104
7.2.2 Nginx伺服器正向代理服務的使用 105
7.3 Nginx伺服器的反向代理服務 105
7.3.1 反向代理的基本設定的21個指令 106
7.3.2 Proxy Buffer的配置的7個指令 113
7.3.3 Proxy Cache的配置的12個指令 115
7.4 Nginx伺服器的負載均衡 119
7.4.1 什麼是負載均衡 120
7.4.2 Nginx伺服器負載均衡配置 120
7.4.3 配置實例一:對所有請求實現一般輪詢規則的負載均衡 120
7.4.4 配置實例二:對所有請求實現加權輪詢規則的負載均衡 121
7.4.5 配置實例三:對特定資源實現負載均衡 121
7.4.6 配置實例四:對不同域名實現負載均衡 122
7.4.7 配置實例五:實現帶有URL
重寫的負載均衡 123
7.5 本章小結 124
第8章 Nginx伺服器的快取機制 125
8.1 Web快取技術簡述 125
8.2 404錯誤驅動Web快取 126
8.3 資源不存在驅動Web快取 127
8.4 基於memcached的快取機制的6個指令 128
8.5 Proxy Cache快取機制 130
8.6 Nginx與Squid組合 133
8.6.1 Squid伺服器的配置 133
8.6.2 Nginx伺服器的配置 133
8.7 基於第三方模組ncache的快取機制 134
8.8 本章小結 134
第9章 Nginx伺服器的郵件服務 135
9.1 郵件服務 135
9.2 Nginx郵件服務的配置的12個指令 136
9.3 Nginx郵件服務配置實例 140
9.4 本章小結 142
第10章 Nginx源碼結構 143
10.1 Nginx源碼的3個目錄結構 143
10.1.1 core目錄 144
10.1.2 event目錄 144
10.1.3 http目錄 145
10.2 Nginx源碼的模組化結構 145
10.2.1 公共功能 145
10.2.2 配置解析 146
10.2.3 記憶體管理 147
10.2.4 事件驅動 147
10.2.5 日誌管理 148
10.2.6 HTTP服務 148
10.2.7 Mail服務 149
10.2.8 模組支持 150
10.3 本章小結 150
第11章 Nginx基本數據結構 151
11.1 ngx_module_s結構體 151
11.1.1 分類標識ctx_index 152
11.1.2 模組計數器index 152
11.1.3 模組上下文 153
11.1.4 回調函式 153
11.2 ngx_command_s結構體 154
11.2.1 type成員 154
11.2.2 函式指針set 156
11.2.3 conf和offset 156
11.3 3個基本模組的指令集數組結構 157
11.3.1 http模組 157
11.3.2 event模組 158
11.3.3 mail模組 159
11.4 ngx_ pool_s結構體 160
11.4.1 ngx_pool_data_t結構體 160
11.4.2 ngx_pool_large_s結構體 161
11.4.3 ngx_pool_cleanup_s結構體 161
11.5 Nginx socket相關的數據結構 161
11.5.1 ngx_listening_s結構體 161
11.5.2 ngx_http_conf_port_t結構體 162
11.5.3 ngx_http_conf_addr_t結構體 163
11.6 ngx_event_s結構體 163
11.7 ngx_connection_s結構體 164
11.8 ngx_cycle_s結構體 166
11.9 ngx_conf_s結構體 168
11.9.1 配置上下文*ctx 169
11.9.2 指令類型type 169
11.10 ngx_signal_t結構體 170
11.11 ngx_process_t結構體 172
11.12 本章小結 172
第12章 Nginx的啟動初始化 173
12.1 Nginx啟動過程概覽 173
12.1.1 程式初始化 173
12.1.2 啟動多進程 174
12.2 Nginx的初始化 175
12.2.1 讀取並處理啟動參數 176
12.2.2 繼承socket 185
12.2.3 初始化時間及建立新的cycle結構 187
12.2.4 建立core模組上下文結構 188
12.2.5 解析配置檔案 190
12.2.6 初始化core模組上下文 196
12.2.7 創建PID檔案 199
12.2.8 處理監聽socket 199
12.2.9 信號設定 201
12.2.10 啟動Master Process 203
12.2.11 Nginx初始化過程總結 204
12.3 Nginx的啟動 205
12.3.1 主進程設定信號阻塞 206
12.3.2 設定進程標題 206
12.3.3 啟動工作進程 208
12.3.4 啟動快取索引重建及管理進程 211
12.3.5 循環處理信號 212
12.3.6 Nginx啟動過程總結 216
12.4 本章小結 217
第13章 Nginx的時間管理 218
13.1 獲取系統時間的一般方法 218
13.1.1 系統調用的開銷 218
13.1.2 gettimeofday 219
13.2 Nginx時間管理的工作原理 220
13.2.1 時間快取的更新 220
13.2.2 更新時間快取的時機 224
13.3 快取時間的精度 226
13.3.1 設定快取時間的精度 226
13.3.2 快取時間精度的控制原理 226
13.4 本章小結 228
第14章 Nginx的記憶體管理 229
14.1 記憶體池的邏輯結構 229
14.2 記憶體池的管理 230
14.2.1 創建記憶體池 231
14.2.2 銷毀記憶體池 234
14.2.3 重置記憶體池 235
14.3 記憶體的使用 235
14.3.1 申請記憶體 235
14.3.2 釋放記憶體 241
14.3.3 回收記憶體 241
14.4 本章小結 243
第15章 Nginx工作進程 244
15.1 工作進程概覽 244
15.2 相關源碼分析 245
15.2.1 設定工作進程運行環境 246
15.2.2 監聽和處理進程控制事件 249
15.2.3 接收網路請求事件 250
15.2.4 執行進程控制 254
15.3.1 Linux進程間通信方式 256
15.3.2 Linux進程間雙工通信的實現 257
15.3.3 通信通道的建立和設定 257
15.3.4 通信通道的使用 259
15.3.5 訊息的讀寫 259
15.4 本章小結 263
第16章 Nginx的模組編程 264
16.1 模組的種類 264
16.2 模組開發實踐 265
16.2.1 “Hello_Nginx”模組編程實例 265
16.2.2 模組的結構 268
16.2.3 模組命名規則 272
16.3 模組的編譯與安裝 272
16.4 本章小結 274
第17章 Nginx在動態網站建設中的套用實例 275
17.1 Nginx在JSP網站建設中的套用 275
17.1.1 環境描述 275
17.1.2 特別模組說明 276
17.1.3 配置方案 276
17.2 Nginx在PHP網站建設中的套用 278
17.2.1 環境描述 278
17.2.2 特別模組說明 279
17.2.3 配置方案 280
17.3 Nginx+Perl腳本在網站建設中的套用 281
17.3.1 環境描述 282
17.3.2 特別模組說明 282
17.3.3 配置方案 282
17.4 本章小結 285
第18章 Nginx經典套用——LNAMP 286
18.1 LNAMP概述 286
18.2 手動部署和配置 287
18.2.1 環境準備 287
18.2.2 安裝和配置MySQL 288
18.2.3 安裝和配置Apache 289
18.2.4 安裝 PHP 289
18.3 自動安裝 293
18.4 本章小結 293
附錄A Nginx內置變數 294
附錄B 正則表達式語法 296