內容簡介
本書圍繞Nginx下Lua開發語言、Nginx核心工作機製、Nginx配置方法、核心數據組件和配置及API指令進行詳細講解。本書主要分五部分:第壹部分介紹Nginx的基本操作,同時講解瞭MySQL、PostgreSQL、Redis、Memcached、MongoDB、OpenResty的基本操作。第二部分詳細講解瞭Lua腳本語言和Lua通用庫。第三部分講解瞭在Nginx開發中經常使用到的一些技術,如:JSON數據交換格式、nginx.conf配置方法和配置指令;還講解瞭Nginx下Lua開發的實現機製。第四部分詳細介紹瞭常用Lua庫和數據庫等組件的使用方法,包括:Redis、MySQL、Memcached、PostgreSQL、MongoDB、Bit、lfs、restry.http、lcurl、FFI、cjson、Template、WebSocket。第五部分詳細介紹瞭ngx_lua的配置指令和ngx_luaAPI,目的是幫助讀者在工作中快速檢索配置指令和API。
目錄
Contents?目 錄
前言
第一部分 Nginx操作基礎
第1章 Nginx高效服務器 2
1.1 Nginx的特點 2
1.2 Nginx的安裝 3
1.3 configure命令參數 7
1.4 小結 12
第2章 數據庫的基本操作 13
2.1 Nginx應用中的數據庫 13
2.2 MySQL關係型數據庫 15
2.2.1 yum安裝方法 16
2.2.2 使用mysql測試服務 18
2.2.3 MySQL文件分布 19
2.2.4 數據庫操作 19
2.3 Redis內存數據庫 22
2.3.1 Redis安裝 22
2.3.2 啓動Redis服務 23
2.3.3 Redis 配置 23
2.3.4 參數說明 26
2.3.5 數據類型 29
2.4 PostgreSQL關係型數據庫 31
2.5 Memcached內存數據庫 33
2.5.1 Memcached安裝 34
2.5.2 連接編輯 34
2.5.3 管理Memcached服務 35
2.5.4 Memcached命令 37
2.6 MongoDB分布式NoSQL數據庫 42
2.6.1 MongoDB安裝 43
2.6.2 mongod.conf配置說明 45
2.7 小結 48
第3章 OpenResty 49
3.1 OpenResty:概述 49
3.2 OpenResty的組成 50
3.3 OpenResty的安裝 52
3.4 Nginx多實例 54
3.5 小結 54
第4章 Nginx核心技術 55
4.1 Nginx設計目標 55
4.2 Nginx架構 57
4.2.1 事件驅動 57
4.2.2 異步多階段處理 59
4.2.3 模塊化設計 61
4.2.4 管理進程、工作進程設計 63
4.2.5 內存池 65
4.2.6 連接池 66
4.2.7 時間緩存 66
4.2.8 延遲關閉 67
4.2.9 跨平颱 67
4.2.10 HTTP模塊管道過濾模式 67
4.2.11 keepalive 68
4.2.12 pipeline 69
4.3 小結 69
第5章 Nginx的工作流程 70
5.1 Nginx的啓動流程 70
5.2 管理進程的工作流程 72
5.3 工作進程的工作流程 75
5.4 配置加載流程 76
5.5 HTTP框架初始化流程 79
5.6 HTTP模塊調用流程 81
5.7 HTTP請求處理流程 82
5.8 小結 83
第二部分 Lua腳本語言
第6章 Lua教程 86
6.1 Lua基礎 86
6.1.1 Lua的特性 86
6.1.2 Lua的應用場景 87
6.1.3 安裝Lua環境 87
6.2 Lua基本語法 88
6.2.1 第一個Lua程序 88
6.2.2 注釋 89
6.2.3 標識符 90
6.2.4 關鍵詞 90
6.2.5 全局變量 90
6.3 Lua的數據類型 90
6.4 Lua變量 96
6.4.1 賦值語句 96
6.4.2 索引 97
6.5 Lua循環 98
6.6 Lua流程控製 98
6.7 Lua函數 99
6.7.1 函數的定義 99
6.7.2 多返迴值 100
6.7.3 可變參數 101
6.8 Lua運算符 101
6.8.1 算術運算符 102
6.8.2 關係運算符 102
6.8.3 邏輯運算符 103
6.8.4 其他運算符 104
6.8.5 運算符的優先級 105
6.9 Lua字符串 106
6.10 Lua數組 107
6.10.1 一維數組 107
6.10.2 多維數組 108
6.11 Lua迭代器 109
6.11.1 泛型for迭代器 109
6.11.2 無狀態的迭代器 110
6.11.3 多狀態的迭代器 111
6.12 Lua錶 112
6.13 Lua模塊與包 113
6.13.1 require函數 114
6.13.2 加載機製 115
6.13.3 C包 115
6.14 Lua元錶 116
6.14.1 _index元方法 117
6.14.2 _newindex元方法 118
6.14.3 為錶添加運算符 119
6.14.4 _call元方法 119
6.14.5 _tostring元方法 120
6.15 Lua協同程序 121
6.15.1 基本語法 121
6.15.2 生産者–消費者問題 124
6.16 Lua錯誤處理 125
6.16.1 語法錯誤 125
6.16.2 運行錯誤 125
6.16.3 錯誤處理 126
6.16.4 error函數 126
6.16.5 pcall、xpcall、debug 127
6.17 Lua調試 128
6.18 Lua垃圾迴收 130
6.19 Lua麵嚮對象 131
6.19.1 Lua中麵嚮對象 132
6.19.2 Lua繼承 134
6.20 Lua數據庫訪問 136
6.21 小結 137
第7章 Lua通用庫 138
7.1 字符串庫 138
7.2 錶庫 141
7.3 文件I/O庫 143
7.3.1 簡單模式 144
7.3.2 完全模式 145
7.3.3 其他方法 146
7.4 數學庫 147
7.5 操作係統庫 150
7.6 小結 151
第三部分 Nginx開發技術
第8章 JSON數據交換格式 154
8.1 什麼是JSON 154
8.2 JSON轉換為JavaScript對象 155
8.3 JSON與XML的比較 155
8.4 JSON語法規則 156
8.5 格式化 157
8.6 小結 158
第9章 nginx.conf文件配置 159
9.1 默認nginx.conf文件 159
9.2 nginx.conf示例 162
9.3 全局配置與頂層配置塊 166
9.3.1 main全局配置 166
9.3.2 events配置塊 170
9.3.3 http服務器配置塊 172
9.3.4 ngx_http_core_module變量 194
9.3.5 stream 195
9.4 中文版nginx.conf 201
9.5 小結 204
第10章 Nginx下Lua實現機製 206
10.1 ngx_lua原理 206
10.2 HTTP請求的處理階段 209
10.3 ngx_lua的處理階段 210
10.4 Lua階段解析 212
10.4.1 init_by_lua 212
10.4.2 init_worker_by_lua 213
10.4.3 set_by_lua 214
10.4.4 rewrite_by_lua 216
10.4.5 access_by_lua 217
10.4.6 content_by_lua 218
10.4.7 header_filter_by_lua 220
10.4.8 body_filter_by_lua 220
10.4.9 log_by_lua 220
10.4.10 balancer_b
前言/序言
Preface?前 言為什麼寫這本書在接手安防雲任務之前,我做瞭近10年傳統安防分布式平颱的工作。安防雲任務是基於雲計算平颱和P2P技術嚮用戶提供SaaS服務。最初我的方案是將我們熟悉的分布式平颱改造成雲服務,進行互聯網部署。
針對消費級攝像機的應用,我們對服務進行瞭裁剪,隻留下幾個服務器。但是需要幾個資深的C++服務器開發工程師提供技術支持。後來,新來的架構師經過一段時間的消化後,提齣瞭Nginx+Lua+Redis架構。他一個人隻花費一個多月的時間就把業務服務寫好瞭。這件事情讓我感受到瞭Nginx+Lua的魅力。
Nginx+Lua架構帶來的改變還遠不止節約時間和成本。從做大型係統的角度來看,它還會帶來更多的東西:
調試方便:因為它不需要編譯代碼,相關訪問模塊是成熟穩定的,隻需要調試新加的業務代碼即可。大型係統特彆是分布式係統,調試一個功能或代碼的鏈條太長瞭,非常容易齣錯。
降低耦閤:因為架構的限製,代碼隻能在必需的階段管理器中開發,代碼是一個個.lua文件,耦閤性大大降低。
框架良好:因為先進的異步式多進程架構,可以充分利用係統資源。如果自行開發並維護這樣一個框架,需要大量的人力、物力。
上手容易:Lua代碼良好的結構和可讀性,使其上手速度更快。團隊成員經過快速培訓就可以上手。
在學習和使用ngx_lua的過程中我發現,網絡上資料其實非常多,但是非常零散,沒有整體性。雖然技術本身是很清晰和易用的,但是對於剛接觸這門技術的開發者來說,想要有條理、係統地把這些知識學完,可能會走一些彎路。因為很多資料已經過時瞭,甄彆和調試會耗費很多時間和精力,同時查閱英文文檔也比較花時間。於是,我就有瞭把自己的學習過程和心得整理成書的想法。
隨後的時間裏,我將自己學習Nginx下Lua開發的思路,以及這個過程中的資料一點點總結齣來加以整理,終成本書。希望本書可以幫助跟我有一樣需求的研發工程師快速瞭解並掌握Nginx下Lua開發技術。
本書的主要內容和特色通常我們學習一門語言、一門技術的時候,都是這樣一個過程:初學這項技術時,我們通常需要知道Lua語言的細節,需要知道Nginx的結構;當我們著手學習時,首先需要搭建一個學習環境,以便瞭解係統的結構和運行機製,同時用於編寫測試代碼;運行第一個測試代碼的時候,需要對Nginx進行配置,但是並不熟悉Nginx的配置,對於nginx.conf裏的內容比較頭疼;等到我們掌握瞭這項開發技術,開始業務係統開發瞭,又往往需要針對具體問題查找配置指令的用法和參數,以及查閱API的詳細用法。
所以,本書按照這樣的不同需求,對Nginx下Lua開發技術的不同關注點做瞭描述。
Nginx的基本知識,包含Nginx的使用、配置、安裝、技術架構、技術特點、主要工作流程等。
外圍關係型數據庫、NoSQL數據庫、緩存等的使用範圍、安裝、使用方法、配置,如MySQL、PostgreSQL、MongoDB、Redis、Memcached。
Lua語法詳解,包含Lua係統庫。
Lua常用庫,包含Redis、MySQL、Memcached、PostgreSQL、MongoDB、Bit、lfs、restry.http、lcurl、FFI、cjson、Template、WebSocket。
兩個相對完整的Lua實例,結閤實例以鞏固涉及的知識點。
ngx_lua的配置指令和API,詳細介紹瞭每一個官方指令和API。
我希望無論是對於Nginx Lua的初學者,還是對於經驗豐富的開發者,都可以通過本書學到基礎知識,找到常用庫的API說明,而不用查閱其他資料及官方英文文檔。
本書麵嚮的讀者本書適閤初學Nginx下Lua開發的工程師使用。通過本書可以比較係統地學習Lua語言,學習框架下經常用到的各組件使用方法,學習Nginx下Lua程序開發;可以參照本書的內容搭建學習環境,逐一測試各組件訪問代碼,並可通過後麵的例子編寫自己的訪問代碼和訪問庫。
本書適閤有經驗的Nginx和Lua開發工程師使用。通過本書可以快速查閱相關數據庫、緩存、庫的使用方法;可以查閱Nginx配置指令;還可以查閱ngx_lua配置指令和API。
本書同樣適閤做服務器端開發的資深工程師使用。書中講解瞭Nginx的核心架構和主要的工作流程,也講解瞭Nginx為瞭提高性能和並發所使用的一些關鍵技術,這些技術和算法對我們開發自己的高性能服務器有重要指導意義。
如何閱讀本書本書主要分五部分:
第一部分(第1~5章)介紹Nginx的基本操作,同時講解瞭MySQL、PostgreSQL、Redis、Memcached、MongoDB、OpenResty的基本操作。通過對本部分的學習可以掌握這些服務的安裝和使用方法,一般用於研發環境的搭建。這裏還講解瞭Nginx核心技術和工作流程,用於幫助讀者進一步掌握Nginx的架構和流程。各個層次的讀者都可以從本部分讀起。
第二部分(第6~7章)詳細講解瞭Lua腳本語言和Lua通用庫。學習Lua語言或查閱Lua語法的初學者可以直接閱讀該部分相應章節。
第三部分(第8~10章)講解瞭在Nginx開發中經常使用的一些技術,如JSON數據交換格式、nginx.conf配置方法和配置指令;還講解瞭Nginx下Lua開發的實現機製。學習Nginx配置的讀者,學習和查閱JSON的讀者可以直接閱讀該部分相應章節,也可以跳過其他章節,直接學習Nginx下Lua的實現機製。
第四部分(第11~26章)詳細介紹瞭常用Lua庫和數據庫等組件的使用方法,包括Redis、MySQL、Memcached、PostgreSQL、MongoDB、Bit、lfs、restry.http、lcurl、FFI、cjson、Template、WebSocket。要瞭解和學習這些內容的讀者,可以直接閱讀對應章節。這裏同時給齣瞭兩個Lua編程實例代碼,要總體瞭解這項編程技術的讀者可直接翻閱相應章節。
第五部分(第27~28章)詳細介紹瞭ngx_lua的配置指令和ngx_lua API,目的是幫助讀者在工作中快速檢索配置指令和API。
勘誤和資源由於時間有限,技術能力有限,雖然已經盡量客觀,在寫作過程中排除自己主觀的內容,但難免有錯誤和不準確的地方,熱忱希望你的批評和指正。
歡迎通過郵箱和我聯係:13067722617@163.com。
緻謝首先需要感謝我的太太一直以來對我的信任和支持,她是我一路走來的動力。寫這本書的時候,九哥已經10歲瞭,他已經知道我在做什麼瞭,他以我為榮,我也以他為傲。感謝我的丈人、丈母娘對我們的愛和一直以來的幫助。
寫這本書的時候,我的父母又來到瞭我們的身邊,為瞭和我們年輕人相處得更融洽,他們做齣瞭巨大的改變。
最後要感謝齣版社的楊福川和李藝,沒有你們的努力是不會見到這本書的。感謝你們的支持和信任!
Nginx Lua開發實戰 下載 mobi epub pdf txt 電子書 格式