《NGINX經典教程》是2022年人民郵電出版社出版的圖書,作者是林靜、劉旭峰、章澍、廖健雄、宗兆偉。
基本介紹
- 中文名:NGINX經典教程
- 作者:林靜、劉旭峰、章澍、廖健雄、宗兆偉
- 出版時間:2022年4月1日
- 出版社:人民郵電出版社
- ISBN:9787115589194
- 開本:16 開
- 裝幀:平裝
內容簡介,圖書目錄,作者簡介,
內容簡介
本書分為5個部分,共32章:第一部分為基礎入門篇,介紹基礎配置和NGINX的運行機制與原理;第二部分為開源功能篇,剖析NGINX開源軟體的功能模組,講述各個模組的功能集合;第三部分為套用場景篇,通過特定的場景展現NGINX的能力及配置方法,站在使用者的角度闡述NGINX的複雜套用場景及注意事項;第四部分為商業軟體篇,介紹NGINX商業版模組的增強能力;最後是NJS開發篇,使用NJS腳本化的方式擴展NGINX的能力。
本書既適合對NGINX開發感興趣的軟體開發工程師、系統工程師、軟體架構師、DevOps人員、運維工程師閱讀,也適合作為培訓教材。
圖書目錄
基礎入門篇
第 1 章 NGINX 的起源與發展 2
1.1 NGINX 的歷史 2
1.2 NGINX 的優良特性和功能 5
1.3 NGINX 發行版 7
1.4 本章小結 9
第 2 章 編譯、安裝和配置 10
2.1 下載源碼 10
2.2 源碼目錄 11
2.3 編譯準備 13
2.4 配置入門 18
2.5 本章小結 23
第 3 章 架構設計與工作模式 24
3.1 模組體系 24
3.2 進程模型 25
3.2.1 worker 進程的模型 27
3.2.2 快取機制 28
3.3 事件驅動模型 28
3.4 本章小結 30
開源功能篇
第 4 章 HTTP 伺服器的功能 32
4.1 HTTP 模組 32
4.2 處理HTTP 請求的階段 34
4.3 HTTP 伺服器的基本配置 41
4.3.1 配置層級 41
4.3.2 配置檔案的結構及示例 42
4.3.3 詳解HTTP 模組定義的指令42
4.4 本章小結 47
第 5 章 HTTP 模組的增強功能 48
5.1 HTTPS 伺服器 48
5.1.1 HTTP 和HTTPS 的區別48
5.1.2 NGINX SSL 模組 50
5.2 HTTP/2 伺服器 52
5.2.1 HTTP/2 協定 52
5.2.2 NGINX 的HTTP/2 模組54
5.3 HTTP 變數使用 54
5.4 HTTP 過濾功能 58
5.5 HTTP 壓縮功能 60
5.6 本章小結 61
第 6 章 七層反向代理的功能 62
6.1 代理的概念 62
6.2 HTTP 反向代理的流程 64
6.3 本章小結 69
第 7 章 七層反向代理的補充功能 70
7.1 gRPC 模組的功能介紹 70
7.2 FastCGI 模組的功能介紹 72
7.3 uWSGI 模組的功能介紹 74
7.4 SCGI 模組的功能介紹 75
7.5 本章小結 76
第 8 章 四層反向代理的功能 77
8.1 NGINX 處理TCP/UDP 請求的7 個階段 77
8.2 四層反向代理與負載均衡配置 78
8.3 本章小結 81
第 9 章 內容快取功能 82
9.1 快取的原理和功能 82
9.2 瀏覽器快取 82
9.3 代理伺服器快取 86
9.3.1 代理伺服器的HTTP 請求流程 86
9.3.2 代理伺服器快取 86
9.3.3 在NGINX 中配置代理快取 87
9.3.4 代理伺服器快取的架構 91
9.4 本章小結 93
第 10 章 流媒體伺服器 94
10.1 流媒體 94
10.2 常見的流媒體協定 95
10.2.1 漸進式下載與HTML595
10.2.2 常見的流媒體協定 95
10.2.3 多螢幕支持 97
10.3 NGINX 的RTMP 模組 98
10.3.1 安裝RTMP 模組 98
10.3.2 配置RTMP 模組 98
10.4 本章小結 100
套用場景篇
第 11 章 套用層轉發 102
11.1 基於HTTP URI 中的path 參數的動態轉發 102
11.2 基於HTTP 頭的動態轉發 106
11.3 本章小結 107
第 12 章 流量加解密 108
12.1 SSL/TLS 卸載 108
12.2 SSL/TLS 透傳 113
12.2.1 在正向代理中需要解決的核心問題 113
12.2.2 七層代理——HTTPCONNECT 隧道 114
12.2.3 HTTP CONNECT 隧道的代碼實現 115
12.2.4 四層代理——L4 轉發 118
12.2.5 L4 轉發的代碼實現 118
12.3 mTLS 和SSL/TLS 裝載 121
12.3.1 配置NGINX 伺服器實現雙向認證 122
12.3.2 使用cURL 驗證雙向認證 123
12.3.3 NGINX Plus 動態載入SSL 證書 124
12.4 本章小結 126
第 13 章 快取與內容加速 127
13.1 背景和需求 127
13.2 NGINX 的快取機制 127
13.2.1 NGINX 的快取處理流程127
13.2.2 NGINX 初始化快取載入132
13.2.3 NGINX 快取檔案的淘汰管理 133
13.3 NGINX 快取配置實踐 134
13.3.1 控制HTTP 頭 134
13.3.2 配置靜態資源快取135
13.3.3 配置動態資源快取137
13.3.4 快取清除 138
13.3.5 快取的問題定位 139
13.3.6 快取最佳化 141
13.4 自建CDN 141
13.5 本章小結 1441
第 14 章 NAT64 和ALG 網關 145
14.1 NAT64 的意義 145
14.2 ALG 的作用 145
14.3 外鏈天窗問題的解決方案 146
14.4 NAT64 和外鏈天窗問題的整體解決方案 147
14.5 本章小結 149
第 15 章 透傳源IP 地址 150
15.1 背景和需求 150
15.2 X-Forwarded-For 欄位 151
15.3 proxy_protocol 協定 155
15.4 透明代理 157
15.5 TOA 方案 159
15.6 本章小結 160
第 16 章 灰度發布與A/B 測試 161
16.1 背景和需求 161
16.2 灰度發布 162
16.3 A/B 測試 165
16.4 本章小結 167
第 17 章 安全與訪問控制 168
17.1 NGINX OAuth 2.0 認證 168
17.1.1 為什麼需要OAuth 168
17.1.2 OAuth 的基本原理 169
17.1.3 使用NGINX 實現授權碼模式的OAuth 的思路 170
17.1.4 代碼實現——使用NGINX 實現授權碼模式的OAuth 174
17.2 基於ACL 的訪問行為控制 178
17.3 減緩DDoS 攻擊 180
17.4 零日漏洞防禦 183
17.5 本章小結 184
第 18 章 對新協定的支持 185
18.1 DoT/DoH 185
18.2 HTTP/3 188
18.3 MQTT 189
18.4 本章小結 191
第 19 章 PaaS Ingress 192
19.1 什麼是PaaS Ingress 192
19.2 在Kubernetes 上部署NGINX 作為Ingress Controller 194
19.2.1 部署NGINX Ingress Controller 195
19.2.2 擴展Ingress Resource功能的五種方式 200
19.3 Ingress Controller 的常見部署結構 212
19.3.1 PaaS 內部署 213
19.3.2 PaaS 外部署 215
19.3.3 內外混合部署 216
19.4 總結 217
第 20 章 微服務與API 網關 218
20.1 微服務 218
20.2 API 網關 220
20.3 典型的API 網關部署模式 225
20.4 本章小結 229
第 21 章 運維管理場景 230
21.1 靈活定製NGINX 日誌 230
21.1.1 兩種類型的NGINX 日誌 230
21.1.2 利用access_log 監控套用性能 231
21.1.3 NGINX 日誌的本地保存管理 233
21.1.4 NGINX 日誌的集中管理 234
21.2 巧用NGINX 請求鏡像 236
21.2.1 通過鏡像實現請求複製 236
21.2.2 通過鏡像實現流量放大 237
21.2.3 鏡像請求與原請求的關聯關係 238
21.2.4 通過鏡像簡化集群管理 241
21.3 探尋請求可觀測 242
21.3.1 商業方案 244
21.3.2 開源方案 246
21.4 高效最佳化NGINX 性能 249
21.4.1 NGINX 的架構設計概述250
21.4.2 NGINX 性能調優方法論251
21.4.3 NGINX 性能調優實踐 257
21.5 快速定位NGINX 問題 260
21.5.1 確保NGINX 節點運行正常 260
21.5.2 檢查NGINX 的日誌信息 262
21.5.3 規範配置,減少問題 264
21.6 線上實施NGINX 熱升級 267
21.6.1 熱升級原理及其狀態過程 267
21.6.2 長連線下的熱升級演示 268
21.7 輕鬆實現NGINX 的CI/CD271
21.7.1 標準的CI/CD 流程271
21.7.2 通過Jenkins 和Ansible自動部署NGINX 273
21.8 本章小結 275
商業軟體篇
第 22 章 NGINX 公司及產品 278
22.1 公司介紹 278
22.2 產品介紹 279
22.3 NGINX 未來發展 285
22.4 本章小結 286
第 23 章 商業模組與指令增強 287
23.1 商業模組 287
23.2 商業指令 291
23.3 指令增強 294
23.4 本章小結 295
第 24 章 集群與管理 296
24.1 部署模式 296
24.2 集群管理 298
24.2.1 部署配置 299
24.2.2 日常監控 300
24.2.3 API 能力 301
24.2.4 集群狀態同步 302
24.3 本章小結 304
第 25 章 訪問認證 305
25.1 JWT 認證與NGINX Plus 305
25.1.1 JWT 基礎 305
25.1.2 NGINX Plus JWT 模組介紹及實踐 307
25.2 OIDC 認證 309
25.2.1 OIDC 認證流程 309
25.2.2 基於okta 的OIDC 配置實踐 310
25.3 本章小結 317
第 26 章 服務發現 318
26.1 使用API 配置上游伺服器 318
26.2 通過DNS 實現服務發現 320
26.2.1 在proxy_pass 指令中使用域名 320
26.2.2 在upstream 中使用域名 321
26.2.3 使用SRV 記錄類型 321
26.3 集成Consul/etcd/ZooKeeper 322
26.3.1 使用Consul API 實現服務發現 323
26.3.2 使用Consul 的DNS SRV記錄實現服務發現 324
26.4 集成confd 325
26.5 本章小結 328
第 27 章 API 管理 329
27.1 從API 形態和範疇看API 管理 329
27.2 從API 部署結構看API 管理331
27.3 NGINX API 管理產品介紹 332
27.4 本章小結 346
第 28 章 動態流量控制 347
28.1 動態流量控制的意義 347
28.2 IC 限流的需求和挑戰 347
28.3 單實例限流 348
28.4 集群級限流 355
28.5 本章小結 359
第 29 章 多環境部署與雲中彈性伸縮360
29.1 支持多環境安裝 360
29.2 在公有雲環境下訂閱安裝NGINX Plus 實例 361
29.3 在容器環境下安裝NGINX Plus實例 364
29.4 公有雲環境與容器環境下的彈性伸縮 367
29.5 本章小結 374
第 30 章 與F5 BIG-IP 集成 375
30.1 避免真實的上游伺服器過載 375
30.2 NGINX 動態控制DNS 配置 381
30.3 本章小結 383
NJS 開發篇
第 31 章 NJS 的起源和價值 386
31.1 NJS 的基礎——JavaScript 386
31.2 NJS 的歷史與版本 389
31.3 NJS 的價值與目標規劃 391
31.4 NJS 的運行機制和特點 392
31.5 本章小結 394
第 32 章 NJS 的安裝與使用案例 395
32.1 使用場景概述 395
32.2 下載與安裝 395
32.3 NJS 開發基礎 398
32.4 使用NGINX 對象 409
32.5 NJS 模組的功能及套用案例 422
32.5.1 ngx_http_js_module模組 422
32.5.2 案例——帶有內容預覽功能的檔案伺服器 423
32.5.3 案例——日誌內容脫敏 429
32.5.4 案例——把客戶端流量平滑遷移到新伺服器 432
32.5.5 ngx_stream_js_module模組 436
32.5.6 案例——PASV 模式下的FTP ALG 協定支持440
32.5.7 案例——為後端伺服器實現虛擬補丁 444
32.6 本章小結 447
作者簡介
林靜
F5軟體架構師,套用交付領域專家,開源愛好者,NGINX布道師,擁有TOGAF 9、CKA等認證。
劉旭峰
F5中國區金融行業技術總監,先後任職於IBM、F5等公司,專注於數據中心架構、金融科技套用、開源軟體技術、IaaS/PaaS等領域。
章澍
F5中國區高級銷售總監,領導過不同的行業銷售團隊,見證了各行業IT建設和發展的不同階段,深度了解客戶在NGINX使用中的技能痛點和需求。
廖健雄
F5 NGINX專家,在金融科技、開源軟負載、業務高並發等領域具備豐富的架構規劃、產品研發經驗。
宗兆偉
F5資深軟體研發工程師,涉及的技術領域包括數據存儲、雲原生生態、DevOps領域,深入理解雲生態中的各種技術。
鄒俊
先後供職於CA、EMC、Pivotal、F5等公司,積累了豐富的容器雲平台相關經驗,主要關注微服務、APIM、Kubernetes等行業技術的發展。