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