一、 安裝nginx
準備主要的三個安裝包,分別是git
nginx-1.15.9.tar.gzgithub
LuaJIT-2.0.5.tar.gz緩存
lua-nginx-module-0.10.14.tar.gz服務器
相關版本能夠去官網下載,放在自定義目錄並解壓:負載均衡
先安裝LuaJIT:性能
下面須要配置一下LuaJIT的環境變量,編譯nginx時須要。lua
再將nginx和lua-nginx-module一塊兒編譯,先執行configure,url
而後makespa
而後install:
啓動nginx:
報錯了,執行以下操做:
執行完後,啓動成功。
二、經常使用邏輯
1)直接返回
2)獲取url參數
3)獲取request body
4)子請求轉發
ngx.location.capture:是一個同步非阻塞的nginx子請求uri,nginx的子請求提供了一個很是強大的方式去實現非阻塞的內部請求,這些子請求僅僅是模擬HTTP請求,可是並無額外的HTTP/TCP,它只能請求到相對於當前nginx服務器的路徑,不能使用絕對路徑進行訪問。
5)POST請求修改消息體
三、經常使用指令介紹
lua_code_cache:
設置是否緩存lua file的代碼,默認是on,即開啓緩存,生產環境強烈建議開啓緩存,不然會大大影響性能,可是本身開發調試時候能夠關閉緩存,這樣不須要reload nginx也能夠是代碼生效。
在調用過一次後,修改賦值內容爲test_content_file_1,不需重啓nginx,能夠看到返回值不同。
lua_package_path:設置 set_by_lua*,content_by_lua* 和 其餘腳本對 Lua 模塊的查找路徑。路徑字符串是標準 Lua 路徑格式,特殊標識 ;; 可被用來表明原始搜索路徑。
lua_package_cpath:設置 set_by_lua*,content_by_lua* 和其餘腳本對 Lua C 模塊的查找路徑。 cpath 路徑字符串是標準 Luacpath 路徑格式,特殊標識;; 可被用來表明原始 cpath 路徑。
init_by_lua_block:當Nginx master進程加載Nginx配置文件時,在全局的Lua虛擬機上運行<lua-script-str>指定的Lua代碼。一般,咱們能夠在服務啓動時註冊Lua全局變量或預加載Lua模塊。
init_by_lua_file:把上面的處理部分轉到lua文件,而且指定文件路徑,其餘的同樣。
set_by_lua_block:將處理結果返回到預約義入參,該指令被設計爲執行短小、快速的代碼塊,由於代碼執行時Nginx的事件循環是被阻塞的,所以應避免耗時的代碼處理。
set_by_lua_file:已文件方式使用上述說明。
content_by_lua_block:
爲每一個請求執行<lua script str>中指定的lua代碼,Lua代碼能夠進行API調用,並在獨立的全局環境中做爲新生成的協程執行,不要在同一位置使用此指令和其餘內容處理程序指令。例如,此指令和proxy-pass指令不該在同一位置使用。
舉例見上面經常使用邏輯裏的圖。
content_by_lua_file:以文件方式使用content_by_lua。
rewrite_by_lua_block:做爲一個rewrite階段的處理程序,爲每一個請求執行由<lua-script-str>指定的Lua代碼。這些Lua代碼能夠調用所有 API,並做爲一個新的協程,在一個獨立的全局環境中執行,注意這個處理過程老是在標準ngx_http_rewrite_module的後面。
重寫URL:
rewrite_by_lua_file:rewrite_by_lua的文件表示。
access_by_lua_block:access階段處理,對每次請求執行在<lua-script-str>中指名的Lua代碼,這些Lua代碼能夠調用 所有 API,並做爲一個新的協程,在一個獨立的全局環境中執行,本指令的處理老是在標準ngx_http_access_module的後面,access_by_lua不能運行在子請求中。
若是child返回200,則:
修改child轉發的url,轉發到不存在的地址:
access_by_lua_file:access_by_lua的文件表示。
header_filter_by_lua_block:用<lua-script-str>中指名的lua代碼,來完成應答消息頭部的過濾。
header_filter_by_lua_file:header_filter_by_lua的文件表示。
body_filter_by_lua_block:使用<lua-script-str>指定的Lua代碼定義一個輸出應答體過濾器。輸入數據塊是ngx.arg[1](Lua的字符串形式),結束標識"eof"是應答體數據最後一位ngx.arg[2](Lua的布爾值形式)。
body_filter_by_lua_file:body_filter_by_lua的文件表示。
balancer_by_lua_block:該指令執行上游的負載均衡Lua代碼,代碼配置在upstream {}小節中。Lua 負載均衡能徹底忽略配置在upstream {}小節中定義的服務列表,而且從一個徹底動態的服務列表中挑選一個節點,全部這些均是經過lua-resty-core庫的ngx.balancer完成。
在8080,8081分別啓動相同的服務,經過傳入的index完成服務端選擇:
balancer_by_lua_file:balancer_by_lua_block的文件表示。
有人翻譯了lua-nginx-module,地址以下:
https://github.com/iresty/nginx-lua-module-zh-wiki#ssl_certificate_by_lua_block