本書主要講解了Nginx 在反向代理和應(yīng)用開發(fā)中的作用,閱讀本書可以了解Nginx 在互聯(lián)網(wǎng)開發(fā)中扮演的多個角色,充分利用這些角色的各項功能有助于提升服務(wù)的整體性能。本書所介紹的大部分功能是通過Nginx+Lua 進行開發(fā)和配置的,但并不要求讀者精通Lua,在必要的位置,本書會對Lua 進行選擇性講解。涉及實戰(zhàn)的內(nèi)容會有配套源碼,方便讀者學(xué)習(xí)和使用。本書適合廣大運維人員和開發(fā)人員學(xué)習(xí),對使用Nginx 完成各種服務(wù)架構(gòu)感興趣的架構(gòu)師也可以閱讀本書。閱讀本書需要有對Nginx 的初級或中級配置經(jīng)驗。
·王力·折800運維架構(gòu)師,Nginx開發(fā)工程師,具有多年互聯(lián)網(wǎng)相關(guān)項目的開發(fā)經(jīng)驗。喜歡使用小眾技術(shù)完成運維、開發(fā)和測試任務(wù),擅長通過架構(gòu)設(shè)計降低開發(fā)難度,擅長搭建Nginx高性能服務(wù)。·湯永全·折800運維主管,具有多年互聯(lián)網(wǎng)相關(guān)項目的運維工作經(jīng)驗。歷經(jīng)傳統(tǒng)運維和互聯(lián)網(wǎng)運維,一步一個腳印,積累了不少運維相關(guān)的經(jīng)驗和感悟。活躍于成都運維管理人員的線下組織“運維羅漢堂”。
第1 章 Nginx 學(xué)前必知................................................................................................................................. 1
1.1 HTTP 請求報文................................................................................................................................. 1
1.2 HTTP 響應(yīng)報文................................................................................................................................. 2
1.3 安裝Nginx......................................................................................................................................... 2
1.4 支持HTTPS....................................................................................................................................... 4
1.5 添加模塊............................................................................................................................................ 4
1.6 小結(jié)..................................................................................................................................................... 4
第2 章 基礎(chǔ)配置............................................................................................................................................. 5
2.1 Nginx 指令和指令塊........................................................................................................................ 5
2.2 Nginx 基本配置說明........................................................................................................................ 6
2.2.1 main 配置.................................................................................................................................. 6
2.2.2 與客戶端有關(guān)的配置............................................................................................................... 7
2.2.3 server 塊..................................................................................................................................... 7
2.2.4 location 塊.................................................................................................................................. 8
2.3 include 的使用................................................................................................................................... 9
2.4 常見配置............................................................................................................................................ 9
2.4.1 常見配置注解..........................................................................................................................10
2.4.2 常見配置實戰(zhàn)技巧..................................................................................................................11
2.5 內(nèi)置變量...........................................................................................................................................13
2.5.1 常見內(nèi)置變量..........................................................................................................................13
2.5.2 常見內(nèi)置變量實戰(zhàn)技巧...........................................................................................................15
2.6 小結(jié)....................................................................................................................................................16
第3 章 強化基礎(chǔ)配置....................................................................................................................................17
3.1 牢記Context .....................................................................................................................................17
3.2 獲取請求的IP 地址........................................................................................................................18
3.2.1 獲取用戶的真實IP 地址.........................................................................................................18
3.2.2 防止IP 地址偽造.....................................................................................................................19
3.2.3 后端服務(wù)器對IP 地址的需求.................................................................................................19
3.3 管理請求的行為..............................................................................................................................20
3.3.1 限制IP 地址的訪問.................................................................................................................20
3.3.2 auth 身份驗證...........................................................................................................................21
3.3.3 利用LDAP 服務(wù)加強安全......................................................................................................22
3.3.4 satisfy 二選一的訪問限制功能...............................................................................................23
3.4 proxy 代理.........................................................................................................................................23
3.4.1 proxy_pass 請求代理規(guī)則........................................................................................................24
3.4.2 減少后端服務(wù)器的網(wǎng)絡(luò)開銷...................................................................................................24
3.4.3 控制請求頭和請求體..............................................................................................................25
3.4.4 控制請求和后端服務(wù)器的交互時間.......................................................................................26
3.5 upstream 使用手冊..........................................................................................................................26
3.5.1 代理多臺服務(wù)器......................................................................................................................27
3.5.2 故障轉(zhuǎn)移..................................................................................................................................28
3.5.3 負載均衡..................................................................................................................................29
3.5.4 通過hash 分片提升緩存命中率..............................................................................................29
3.5.5 利用長連接提升性能..............................................................................................................30
3.5.6 利用resolver 加速對內(nèi)部域名的訪問....................................................................................31
3.6 rewrite 使用手冊..............................................................................................................................32
3.6.1 內(nèi)部重定向..............................................................................................................................32
3.6.2 域名跳轉(zhuǎn)..................................................................................................................................33
3.6.3 跳轉(zhuǎn)POST 請求.......................................................................................................................34
3.6.4 設(shè)置變量的值..........................................................................................................................34
3.7 限速白名單.......................................................................................................................................35
3.8 日志....................................................................................................................................................36
3.8.1 記錄自定義變量......................................................................................................................36
3.8.2 日志格式規(guī)范..........................................................................................................................36
3.8.3 日志存儲......