-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

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

( 簡體 字)
作者:王力,湯永全類別:1. -> 程式設計 -> 網路編程 -> Nginx
譯者:
出版社:電子工業出版社Nginx實戰:基于Lua語言的配置、開發與架構詳解 3dWoo書號: 50668
詢問書籍請說出此書號!

缺書
NT售價: 395

出版日:3/1/2019
頁數:344
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121354601
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

Nginx 自2004 年發布第一個公開版本以來,就因其穩定性強、配置靈活、占用內存少、反向代理功能強大,而被越來越多的人喜愛和使用。隨著人們對Nginx 關注度的不斷上升,Nginx 有了更多的使用場景,但在大多數公司中仍然只是扮演著反向代理的角色。
筆者在折800 電商平臺(以下簡稱折800)工作多年,深感對一個電商平臺來說,在成本控制和服務性能之間取得平衡是能夠可持續發展的前提之一。與同類型且流量級別相近的公司相比,折800 的計算機硬件成本要低很多,這主要得益于公司對軟件技術的極致追求。在這樣的背景下,我們熱衷于研究Nginx 反向代理等小眾技術,并使用Nginx 實現了大量功能,極大地提升了服務的性能和靈活度。
目前,Nginx 在國內的影響力還比較有限,因此很多開發人員并不了解Nginx 的魅力,筆者寫這本書的目的就是和大家分享Nginx 的使用技巧,并一起來推廣Nginx。
市面上已經有一些介紹Nginx 技術的書籍,但大多偏向于對Nginx 配置和原理的講解,還有一些書籍是基于C 或C++來介紹Nginx 模塊的。這樣的書籍要求讀者對Nginx 的原理和源碼有所了解,甚至還要有深厚的C 語言或C++語言的開發功底,這對大多數初學者來說要求太高了。
怎樣才能做到既發揮出Nginx 的威力,又盡量降低學習成本呢?筆者選擇使用OpenResty的核心組件,因為OpenResty 是Nginx+Lua 的完美結合,它既能夠實現Nginx 的異步功能,又兼有Lua 的易學優勢,這樣,在使用Nginx 進行開發的過程中就不需要深入了解Nginx 的原理了(如果已經掌握了Nginx 原理當然更好)。所以,與市面上的大多數同類書籍不同,本書不會過多介紹Nginx 配置和原理方面的內容,學習難度較低。
近幾年來,OpenResty 的熱度不斷上升,各大互聯網公司紛紛嘗試使用Nginx+Lua 的開發模式,在反向代理、網關系統、API 調度服務中都能看到這種開發模式的“身影”。希望本書可以讓更多的開發人員了解Nginx+Lua 的魅力,也讓更多技術團隊能夠合理地使用Nginx,降低硬件的投入成本,同時提升服務的性能。
本書由王力、湯永全著。全書內容共分18 章,其中第1~5 章介紹Nginx 常見的配置方式,屬于Nginx 的入門知識;第6~10 章對Nginx+Lua 核心功能進行解讀,是熟悉Nginx+Lua開發模式的必備知識;第11~18 章是Nginx+Lua 開發模式在實際業務中的實踐應用,是靈活運用該模式的具體體現。
感謝彭赫、楊明翰、馮浩、劉凱、屈耀華對本書的支持;也感謝折800 技術平臺,在這里我得到了持續的歷練和成長。同時,感謝電子工業出版社博文視點的編輯付睿和崔志偉,他們在本書的語言表述方面給了很多建議。
本書包含了作者的技術實踐,如果你對本書內容有任何建議和疑惑,可以發電子郵件。謝謝!
王力
2018 年12 月
內容簡介:

本書主要講解了Nginx 在反向代理和應用開發中的作用,閱讀本書可以了解Nginx 在互聯網開發中扮演的多個角色,充分利用這些角色的各項功能有助于提升服務的整體性能。本書所介紹的大部分功能是通過Nginx+Lua 進行開發和配置的,但并不要求讀者精通Lua,在必要的位置,本書會對Lua 進行選擇性講解。涉及實戰的內容會有配套源碼,方便讀者學習和使用。本書適合廣大運維人員和開發人員學習,對使用Nginx 完成各種服務架構感興趣的架構師也可以閱讀本書。閱讀本書需要有對Nginx 的初級或中級配置經驗。
目錄:

第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
序: