Nginx 實戰:基於 Lua 語言的配置、開發與架構詳解

王力,湯永全

  • 出版商: 電子工業
  • 出版日期: 2019-03-01
  • 售價: $474
  • 貴賓價: 9.5$450
  • 語言: 簡體中文
  • 頁數: 344
  • ISBN: 7121354608
  • ISBN-13: 9787121354601
  • 相關分類: 網站伺服器 Web-server

立即出貨

買這商品的人也買了...

商品描述

本書主要講解了Nginx 在反向代理和應用開發中的作用,閱讀本書可以了解Nginx 在互聯網開發中扮演的多個角色,充分利用這些角色的各項功能有助於提升服務的整體性能。

本書所介紹的大部分功能是通過Nginx+Lua 進行開發和配置的,但並不要求讀者精通Lua,在必要的位置,本書會對Lua 進行選擇性講解。

涉及實戰的內容會有配套源碼,方便讀者學習和使用。

本書適合廣大運維人員和開發人員學習,對使用Nginx 完成各種服務架構感興趣的架構師也可以閱讀本書。閱讀本書需要有對Nginx 的初級或中級配置經驗。

作者簡介

王力
運維架構師,Nginx開發工程師,具有多年互聯網相關項目的開發經驗。喜歡使用小眾技術完成運維、開發和測試任務,擅長通過架構設計降低開發難度,擅長搭建Nginx高性能服務。·湯永全·折800運維主管,具有多年互聯網相關項目的運維工作經驗。歷經傳統運維和互聯網運維,一步一個腳印,積累了不少運維相關的經驗和感悟。活躍於成都運維管理人員的線下組織“運維羅漢堂”。

目錄大綱

第1章Nginx學前必知        ..... ............     ................. 1 
1.1 HTTP請求報文........ ............ ............     .. 1 
1.2 HTTP響應報文    .... ............ ............ ...... 2 
1.3安裝Nginx        .. ............ ......... 2 
1.4支持HTTPS        ........... ............     ................. 4
1.5添加模塊        ......... ............ ..... 4 
1.6小結.... ............ ............ ....... 4 

第2章基礎配置        ........... ............ .... 5 
2.1 Nginx指令和指令塊. ............ ............      5 
2.2 Nginx基本配置說明    ...... ............ ....... 6
2.2.1 main配置        ....... ............     ................ 6 
2.2.2與客戶端有關的配置..... ............ ............ ...... 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常見配置實戰技巧    . ............ ......11 
2.5內置變量.. ............ ............     ..................13 
2.5.1常見內置變量...... ............ ............ ................13
2.5.2常見內置變量實戰技巧        .... ............ ...............15 
2.6小結    ............. ............ ............ ................16 

第3章強化基礎配置    ........ ............ ............ .....17 
3.1牢記Context ... ............ ....17 
3.2獲取請求的IP地址. ............ ............     18
3.2.1獲取用戶的真實IP地址        ... ............ ..............18 
3.2.2防止IP地址偽造    ......... ............ .19 
3.2.3後端服務器對IP地址的需求        ........... ..........19 
3.3管理請求的行為        ........ ............     ...........20 
3.3.1限制IP地址的訪問........... ............ ............ ..20
3.3.2 auth身份驗證        ...... ............     ..........21 
3.3.3利用LDAP服務加強安全............ ............ ..22 
3.3.4 satisfy二選一的訪問限制功能        .......... .........23 
3.4 proxy代理        ........... ............ 23 
3.4.1 proxy_pass請求代理規則.... ............ ............ 24
3.4.2減少後端服務器的網絡開銷        .. ............ .........24 
3.4.3控制請求頭和請求體    ............ ............     ..........25 
3.4.4控制請求和後端服務器的交互時間........ ............     ..........26 
3.5 upstream使用手冊................ ............ ............ ......26 
3.5.1代理多台服務器    ................. ............     .............27 
3.5.2故障轉移............ ............ ............ ..................28
3.5.3負載均衡        ....... ............     ................29 
3.5.4通過hash分片提升緩存命中率... ............ ...29 
3.5.5利用長連接提升性能        ............ ............ ..........30 
3.5.6利用resolver加速對內部域名的訪問    ......... ............ ......31 
3.6 rewrite使用手冊        . ............     ..................32
3.6.1內部重定向        ...... ............     .............32 
3.6.2域名跳轉........... ............ ............     33 
3.6.3跳轉POST請求    .... ............ ........34 
3.6.4設置變量的值        ........ ............     .......34 
3.7限速白名單.................. ............ ............ .................35
3.8日誌        .......... ............ ............ 36 
3.8.1記錄自定義變量        .... ............     .......36 
3.8.2日誌格式規範................. ............ ............ .....36 
3.8.3日誌存儲        . ............ ...37 
3.9 HTTP執行階段.... ............ ............     .....38
3.10小結        .......... ............ ..........39 

第4章常用模塊精解        ...... ............ 40 
4.1定制HTTP頭信息...... ............ ............ ................40 
4.1.1使用ngx_http_headers_module設置響應頭    ...... ............ 40 
4.1.2使用headers-more-nginx控制請求頭和響應頭    ...............     ................43
4.2第三方模塊set-misc-nginx        ... ............ .................45 
4.2.1設置變量    ........ ............ ............ ...46 
4.2.2防止SQL注入        .. ............     ............46 
4.2.3字符串非轉義和轉義....... ............ ............ ...47 
4.2.4基於鍵值的集群分片    ................. ............     .....48
4.2.5 base編碼        ....... ............     ................48 
4.2.6 md5編碼......... ............ ............     ..50 
4.2.7生成隨機數    ... ............ ............ ....50 
4.2.8本地時間的輸出         ............     ...........52 
4.2.9實戰經驗.............. ............ ............ ................52
4.3圖片的處理        ........ ............ .53 
4.3.1 image_filter圖片處理.... ............ ............ ......53 
4.3.2採用漸進式方式打開JPEG圖片    .............. ............ .........55 
4.3.3 WebP格式    ................ ............ .....56 
4.3.4優化圖片. ............ ............     ..........56
4.3.5實戰經驗:動態切圖        ... ............     58 
4.4 TCP和UDP代理    ...... ............ ...........58 
4.4.1代理配置說明        ...... ............     .........58 
4.4.2 DNS服務的反向代理............ ............ ..........62 
4.4 .3 MySQL集群代理配置        ...... ............ ...............62
4.4.4實戰經驗        ....... ............     ................63 
4.5常用模塊介紹.......... ............ ............     ..63 
4.5.1基於訪問IP地址跳轉到對應城市................ ............     ....63 
4.5.2修改響應內容    . ............ ............ ..65 
4.5.3零像素文件的生成及其作用    ................. ............ .............66
4.5.4圖片的防盜鏈        ..... ............     ..........67 
4.6小結.................. ............ ............     ...........68 

第5章緩存系統.............. ............ ............     .......69 
5.1緩存配置說明     ............ ............ ............69 
5.2控制緩存有效期    .............. ............ .....71
5.3性能優化        ......... ............ ....72 
5.3.1緩存未命中的最佳實踐        ......... ............ ..........72 
5.3.2橫向擴展最佳實踐    ............ ............     ..............75 
5.3.3避免硬盤I/O阻塞....... ............ ............ ........76 
5.3.4集群模式    ................. ............ ......77
5.4高可用方案        ........ ............ .77 
5.5 proxy_cache配置模板...... ............ ............ ..........78 
5.6小結    .................. ............ ............ ...........81 

第6章引入Lua    .............. ............ ............ ........82 
6.1引入Lua的原因    ................. ............ ..82
6.2 Lua和LuaJIT ........ ............     ................83 
6.3環境搭建........... ............ ............     .........83 
6.4 Lua的數據類型................ ............ ............ ...........84 
6.4.1類型說明    .............. ............ .........84 
6.4. 2類型示例        ......... ............     ..............85
6.5表達式        ......... ............ .........89 
6.5. 1算術運算符        ........ ............     ...........89 
6.5.2關係運算符............. ............ ............ .............90 
6.5.3邏輯運算符    ........... ............ ........91 
6.5.4字符串連接和字符串長度計算        .... ............ ...92
6.5.5運算符優先級        ..... ............     ..........93 
6.6變量.................. ............ ............     ...........93 
6.6.1全局變量.............. ............ ............ ................94 
6.6.2局部變量    ......... ............ ............ ..94 
6.6.3變量賦值        .... ............ 94
6.7流程控制        ......... ............ ....95 
6.7.1 if-else . ............ ............     ................95 
6.7.2 for循環......... ............ ............     .....96 
6.7.3 while循環    . ............ ............ .........97 
6.7.4 break和return     ............... ............ 97
6.8函數        .......... ............ ............ 98 
6.8.1函數格式        ...... ............     .................98 
6.8.2傳參方式....... ............ ............     ....99 
6.8.3函數的創建位置     ............ .........100 
6.9模塊        ............ ............ ........100
6.9.1模塊格式        ....... ............     ..............101 
6.9.2加載模塊........... ............ ............ .................101 
6.10 Lua常見操作    ......... ............ ...........102 
6.10.1操作table ....... ............     ...........102 
6.10.2定義字符串............. ............ ............ .........103
6.10.3字符串連接        ...... ............     .........104 
6.11引入Lua的插曲................ ............ ............ ......104 
6.12小結        ... ............ ............ ...105 

第7章Lua-Nginx-Module常用指令    ................. ............ ................106 
7.1 Nginx和OpenResty     .......... ............ .106
7.2安裝Ngx_Lua ......... ............     ............107 
7.3牢記Context ............... ............ ............ ................108 
7.4 Hello World     ........... ............ ............ ...108 
7.5避免I/O阻塞        .. ............ ..109 
7.6定義模塊搜索路徑.... ............ ............ ................109
7.6.1定義Lua模塊的搜索路徑        ... ............ ..........109 
7.6.2定義C模塊的搜索路徑    ........... ............     .....110 
7.7讀/寫Nginx的內置變量................. ............ .....110 
7.8控制請求頭.. ............ ............     ............111 
7.8.1添加請求頭............ ............ ............ ............111
7.8.2清除請求頭        ...... ............     ...........112 
7.8.3獲取請求頭............. ............ ............ ...........112 
7.9控制響應頭    ............... ............ ...........113 
7.9.1獲取響應頭        ...... ............     ...........113 
7.9.2修改響應頭............. ............ ............ ...........114
7.9.3清除響應頭        ...... ............     ...........116 
7.10讀取請求體.............. ............ ............ .................116 
7.10.1強制獲取請求體    ...... ............ .116 
7.10.2用同步非阻塞方式獲取請求體        ........... ....117 
7.10.3使用場景示例. ............ ............ .................118
7.10.4使用建議        ....... ............     ............121 
7.11輸出響應體.............. ............ ............ .................121 
7.11.1異步發送響應體    ...... ............ .121 
7.11.2同步發送響應體... ............ ............ ...........122 
7.12正則表達式    ............... ............ .........124
7.12.1單一捕獲        ....... ............     ............124 
7.12.2全部捕獲............. ............ ............ .............125 
7.12.3更高效的匹配和捕獲    ........ ............     ..........126 
7.12.4替換數據............... ............ ............ ...........128 
7.12.5轉義符號    ............. ............ ......129
7.13子請求        ......... ............ .....130 
7.13.1請求方法. ............ ............     ......130 
7.13.2單一子請求.................. ............ ............ ....130 
7.13.3並發子請求        . ............     ..............134 
7.14獲取Nginx的環境變量.......... ............ ...........135
7.14.1獲取環境所在的模塊        .... ............ ..............135 
7.14.2確認調試模式    .......... ............ .136 
7.14.3獲取prefix路徑.... ............ ............ ...........136 
7.14.4獲取Nginx的版本號    ........... ............     ........136 
7.14.5獲取configure信息................ ............ .....136
7.14.6獲取Ngx_Lua的版本號        .... ............ ..........137 
7.14.7判斷worker進程是否退出    ............ ............ ................137 
7.14.8獲取worker進程的ID     ...... ............     ..........137 
7.14.9獲取worker進程的數量............ ............ .137 
7.15定時任務....... ............ ............     .........138
7.15.1創建定時任務        ...... ............     .....138 
7.15.2性能優化    . ............ ............ ......140 
7.15.3禁用的Lua API    ................. ............     ...........141 
7.16常用指令................ ............ ............     142 
7.16.1請求重定向    ..... ............ ..........142
7.16.2日誌記錄        ....... ............     ............144 
7.16.3請求中斷處理............ ............ ............ ......146 
7.17提升開發和測試效率    .................. ............     .......149 
7.17.1斷開客戶端連接............... ............ ...........149 
7.17.2請求休眠        ....... ............     ............150
7.17.3獲取系統時間        ...... ............     .....150 
7.17.4編碼與解碼     ............ ............ ...152 
7.17.5防止SQL注入        .. ............     ........154 
7.17.6判斷是否為子請求.............. ............ ........155 
7.17.7設置MIME類型        ......... ............ .................156
7.18小結        .......... ............ ........156 

第8章Ngx_Lua的執行階段        ........ ............     .157 
8.1 init_by_lua_block    ........ ............ ........157 
8.1.1階段說明        .......... ............     ...........157 
8.1.2初始化配置.............. ............ ............ ..........158
8.1.3控制初始值        ...... ............     ...........159 
8.1.4 init_by_lua_file............... ............ ............ ....160 
8.1.5可使用的Lua API指令    ................. ............     160 
8.2 init_worker_by_lua_block     ......... ............     ...........160 
8.2.1階段說明.............. ............ ............ ..............160
8.2.2啟動Nginx的定時任務        .... ............ .............161 
8.2.3動態進行後端健康檢查    ........ ............     .........162 
8.3 set_by_lua_block     ............ ............ .....165 
8.3.1階段說明        . ............ .165 
8.3.2變量賦值..... ............ ............     ....165
8.3.3 rewrite階段的混用模式        .... ............ ............166 
8.3.4阻塞事件    ............. ............ ........167 
8.3.5被禁用的Lua API指令        ...... ............ ...........167 
8.4 rewrite_by_lua_block     ................. ............     ...........168 
8.4.1階段說明.............. ............ ............ ..............168
8.4.2利用rewrite_by_lua_no_postpone改變執行順序        ....     ....168 
8.4.3階段控制    .. ............ ............ .......169 
8.5 access_by_lua_block        .. ............     .........169 
8.5.1階段說明................ ............ ............ ............169 
8.5.2利用access_by_lua_no_postpone改變執行順序    ..........     ..................170
8.5.3階段控制        ....... ............     ..............170 
8.5.4動態配置黑白名單......... ............ ............ ...170 
8.6 content_by_lua_block        ...... ............     ...170 
8.6.1階段說明    ... ............ ............ ......170 
8.6.2動態調整執行文件的路徑    ............... ............ .................171
8.7 balancer_by_lua_block        .......... ............ ................171 
8.7.1階段說明    ......... ............ ............ 171 
8.7.2被禁用的Lua API指令        .. ............ ...............172 
8.8 header_filter_by_lua_block     ............. ............     .....172 
8.8.1階段說明    . ............ ............ ........172
8.8.2被禁用的Lua API指令        ... ............ ..............173 
8.9 body_filter_by_lua_block     .............. ............     .......173 
8.9.1階段說明.................. ............ ............ ..........173 
8.9.2控制響應體數據    ............. ............     ...............173 
8.9.3被禁用的Lua API指令...... ............ ...........175
8.10 log_by_lua_block        .......... ............     ....176 
8.10.1階段說明    .. ............ ............ .....176 
8.10.2被禁用的Lua API指令    ................ ............ ..................176 
8.11 Lua和ngx.ssl     ...... ............ ............ ..177 
8.12 Ngx_Lua執行階段        ..... ............     ......177
8.13小結        .......... ............ ........180 

第9章Nginx與數據庫的交互        ....... ............ ..................181 
9.1安裝cjson    ......... ............ ............ ........181 
9.2與MySQL交互    .................. ............ 183 
9.2.1安裝lua-resty-mysql模塊. ............ ............ .183
9.2.2讀取MySQL數據        ..... ............     .183 
9.2.3執行多條SQL語句    .. ............ ..187 
9.2.4防止SQL注入... ............ ............ ................189 
9.3與Redis交互    .......... ............ ............ .189 
9.3.1安裝lua-resty-redis . ............     ....189
9.3.2讀/寫Redis ..... ............     .............189 
9.3.3管道命令............ ............ ............ ................191 
9.3.4密碼登錄    ......... ............ ............ 193 
9.3.5其他執行命令        ..... ............     ........194 
9.4與數據庫交互的常見問題............... ............ ....194
9.4.1連接池        ....... ............     ..................194 
9.4.2讀/寫分離..... ............ ............     ...197 
9.4.3分離配置文件和代碼     ............ .197 
9.5小結........ ............ ............ 198 

第10章緩存利器...... ............ ............     ...........199
10.1 worker進程的共享內存        ...... ............ ..............200 
10.1.1創建共享內存區域    ......... ............     .............200 
10.1.2操作共享內存........... ............ ............ .......201 
10.1.3製造消息隊列    ................. ............     .............205 
10.1.4 lua-resty-core ......... ............ ............ ...........207
10.1.5配置環境        ....... ............     ............208 
10.2 Lua模塊下的共享內存........... ............ ...........209 
10.2.1安裝lua-resty-lrucache        ... ............ ..............209 
10.2.2使用lua-resty-lrucache進行緩存的方法    ... ............ ....209 
10.3當前請求在各執行階段間的數據共享    ............... ...........213 
10.3.1 ngx.ctx的使用        .... ............     .......213
10.3.2子請求和內部重定向的緩存區別         ...........214 
10.4利用共享內存配置動態IP地址認證        ... ......215 
10.5緩存和數據庫的交互        ........... ............ ..............218 
10.5.1從數據庫獲取數據    ......... ............     .............218 
10.5.2避免出現因緩存失效引起的“風暴”.... ............     ......223 
10.6小結    ... ............ ............     ...228

第11章動態管理upstream        ...... ............     ....229 
11.1實戰需求分析    ... ............ ............ .....230 
11.2 ngx_http_dyups_module .... ............ .................230 
11.2.1安裝ngx_http_dyups_module    ........ ............ .................230 
11.2.2動態管理upstream    ....... ............     ................230
11.2.3確保upstream數據的完整性        ... ............ ...232 
11.3 nginx-upsync-module .. ............     .....233 
11.3.1安裝nginx-upsync-module和Consul.............. ............ ..................233 
11.3.2 Consul的鍵值操作    .... ............     ..................234 
11.3.3動態管理upstream...... ............ ............ .....235 
11.3.4驗證動態配置功能    .................. ............     ....237
11.3.5高可用、高並發設計        ... ............ ...............237 
11.4基於balancer_by_lua_block的靈活控制    ......... ............ .238 
11.5小結        ........ ............ ..........239 

第12章Nginx日誌分析系統        ...... ............     ..240 
12.1實戰需求分析    ..... ............ ............ ..240
12.2 ngxtop實時分析        ........ ............     .......241 
12.3 Flume方案的日誌分析................. ............ .....243 
12.4智能化nginx_log_analysis .. ............ ............ ..244 
12.4.1架構重構        ... ............     ................244 
12.4.2日誌遠程傳輸........ ............ ............ ..........245
12.4.3時序數據庫        ....... ............     ........245 
12.4.4日誌規則設計................ ............ ............ ..245 
12.5 lua-resty-logger-socket傳輸方案    .................. ............ .......246 
12.5.1安裝lua-resty-logger-socket    ............ ............ ................246 
12.5.2遠程傳輸配置    ........ ............ ...247
12.5.3參數解讀        ....... ............     ............248 
12.6時序數據庫InfluxDB.............. ............ ...........249 
12.6.1安裝InfluxDB ....... ............     ....249 
12.6.2基本概念和操作     ............ .......249 
12.6.3數據分析之查詢函數        ........ ............ ..........250
12.6.4數據存放之保留策略        .... ............ ..............251 
12.6.5定時任務之連續查詢    ........ ............     ..........251 
12.6.6客戶端操作之API............ ............ ...........252 
12.6.7使用UDP模式傳輸數據        .... ............ .........253 
12.7利用lua-resty-http實現API交互    ........... ............ ............254 
12.7.1安裝lua-resty-http    ......... ............     ...............254
12.7.2使用方式        ....... ............     ............254 
12.8提升InfluxDB性能.............. ............ ............ ..255 
12.9小結        ....... ............ ...........255 

第13章靜態容災系統        ..... ............     ...............256 
13.1荊棘之路........... ............ ............     .....257
13.2設計之路        ........ ............ .259 
13.3架構流程圖...... ............ ............     ......261 
13.3.1反向代理系統................. ............ ............ .261 
13.3.2日誌分析系統        .... ............     .......261 
13.3.3後台系統.................. ............ ............ ........261
13.3.4爬蟲系統        ....... ............     ............262 
13.3.5容災的緩存系統.......... ............ ............ ....262 
13.3.6時間版本的用途         ............     .......263 
13.3.7異地容災................. ............ ............ .........263 
13.4核心代碼解說    ................. ............ ..264
13.4.1 Ngx_Lua應用        ....... ............     ....264 
13.4.2爬蟲和日誌系統的關係................. ............     .................266 
13.4.3全部容災和部分容災功能.. ............ .........266 
13.5靜態容災的智能關閉方案        ...... ............ ..........267 
13.5.1從日誌分析系統中復制請求    .......... ............ ................267 
13.5.2利用goreplay複製流量    ....... ............     ........267
13.5.3 Nginx的鏡像功能        ..... ............     268 
13.5.4灰度驗證容災系統緩存    . ............     ..............269 
13.6小結.............. ............ ............     ...........269 

第14章深入挖掘反向代理........... ............ ............ .......270 
14.1驗證碼防禦中心    .................. ............     ................270
14.2鑑權管理中心        ....... ............     ............272 
14.2.1利用auth_request管理鑑權.......... ............     .................272 
14.2.2利用Ngx_Lua子請求實現鑑權功能.. ............     ...........273 
14.3並行訪問................ ............ ............     274 
14.3.1輕線程的啟動和終止    .. ............     ................275 
14.3.2等待和終止輕線程...... ............ ............ ....276
14.3.3 URL的外部合併和內部並發        .. ............ ....278 
14.3.4使用cosocket實現外部訪問    .................. ............ ........281 
14.4小結        . ............ ............ .....281 

第15章爬蟲        .. ............ ............ .....282 
15.1區分搜索引擎爬蟲和惡意爬蟲    ................. ............ ..........282
15.2應對搜索引擎爬蟲        ....... ............     ....284 
15.2.1搜索引擎的User-Agent................. .............................284 
15.2.2 Robots協議........ ............ ............ ..............285 
15.2.3控制搜索引擎爬蟲實戰    ........ ............     .......286 
15.3應對惡意爬蟲     ............ ............ .......288
15.3.1發現惡意爬蟲        ...... .................288 
15.3.2抵禦惡意爬蟲之禁止訪問................ ..........................289 
15.3.3抵禦惡意爬蟲之驗證碼攔截...... ............ .290 
15.4小插曲——使用假數據迷惑惡意爬蟲        ..........................290 
15.5小結............. ............ ........................291 

第16章性能分析和優化........... ............ ............ ............292
16.1性能分析場景搭建        ....... ................292 
16.1.1安裝SystemTap     .. ............ ......292 
16.1.2 LuaJIT的Debug模式        .......... ............ ........293 
16.1.3開啟PCRE的Debug模式    .............. ............ ...............294 
16.1.4分析工具下載    ......... ............ ..294 
16.1.5找出不支持Debug模式的lib庫        ......... ...295
16.2流量複製        ......... ............ 295 
16.3各項指標分析和優化建議... ............ ............ .295 
16.3.1連接池使用狀態分析        .. ............ ................295 
16.3.2找出讀/寫頻繁的文件    ... ............     ..............297 
16.3.3執行階段耗時分析........ ............ ............ ..297 
16.3.4 HTTP連接數和文件打開數分析    ................. ............ ..298
16.3.5找出CPU“偷竊者”        .. ............ ................298 
16.3.6正則表達式耗時分析    ..... ............     .............299 
16.3.7找出消耗CPU資源較多的指令..... ...........................301 
16.3.8利用火焰圖展示和分析數據..... ............ ..303 
16.4檢查全局變量..... ............ ............     ..305 
16.5小結    ....... ............ ............ ..................305

第17章值得擁有的OpenResty        ..... ............ ................306 
17.1 OPM    ............ ............ ............ ............307 
17.2使用DNS提升訪問效率    ............ ............     .......309 
17.3 TCP和UDP服務.................. ............ ............ ..310 
17.4多層級緩存        ..... ............ 312
17.5 lua-resty-core擴展   ..... ...................313 
17.5.1字符串分割................. ............ ............ .....313 
17.5.2 Nginx進程管理         ............     .........313 
17.6全局唯一標識符UUID............... ............ .......315 
17.7 “全家福” awesome-resty ......... ............ .......316
17.8 OpenResty,未來!        ............ ............ ................316 

第18章開發環境下的常見問題    ..... .............................317 
18.1被截斷的響應體....... ............ ............ ...............317 
18.2 “邪惡”的if     ......... ............ ...........317 
18.3 “貪婪”的正則匹配        ..... .............318
18.4規範HTTP狀態碼        ....... ................319 
18.5規範URL    .... ............ ............ ...........319 
18.6 proxy_set_header的誤操作    .............. ............     .320 
18.7開發環境下的證書問題    ... ..............................320 
18.8深層次的錯誤重定向..... ............ ............ ........323
18.9壓測環境下的限速和短連接        . ............ ...........323 
18.10小結    ................. ............ ............ ......323