wget http://luajit.org/download/LuaJIT-2.1.0-beta1.tar.gz tar -xvf LuaJIT-2.1.0-beta1.tar.gz cd LuaJIT-2.1.0-beta1 make && make install
wget https://openresty.org/download/ngx_openresty-1.7.10.1.tar.gz tar -zxxvf ngx_openresty-1.7.10.1.tar.gz cd ngx_openresty-1.7.10.1 ./configure --prefix=/usr/local/openresty gmake&&gmake install
wget https://openresty.org/download/openresty-1.13.6.1.tar.gz tar -zxvf openresty-1.13.6.1.tar.gz cd openresty-1.13.6.1 ./configure --prefix=/usr/local/openresty make mv /usr/local/openresty/nginx/sbin/nginx /usr/local/openresty/nginx/sbin/nginx.old cp build/nginx-1.13.6/objs/nginx /usr/local/openresty/nginx/sbin/nginx kill -USR2 `cat /home/lua/nginx.pid` kill -QUIT `cat /home/lua/nginx.pid.oldbin` /usr/local/openresty/nginx/sbin/nginx -t /usr/local/openresty/nginx/sbin/nginx -v /usr/local/openresty/nginx/sbin/nginx -s reload
nginx在處理每個用戶請求時,都是按照若干個不一樣的階段依次處理的,與配置文件上的順序沒有關係,詳細內容能夠閱讀《深刻理解nginx:模塊開發與架構解析》這本書,這裏只作簡單介紹;html
一、post-readnginx
讀取請求內容階段,nginx讀取並解析完請求頭以後就當即開始運行;git
二、server-rewritegithub
server請求地址重寫階段;緩存
三、find-configbash
配置查找階段,用來完成當前請求與location配重塊之間的配對工做;架構
四、rewrite併發
location請求地址重寫階段,當ngx_rewrite指令用於location中,就是再這個階段運行的;運維
五、post-rewrite異步
請求地址重寫提交階段,當nginx完成rewrite階段所要求的內部跳轉動做,若是rewrite階段有這個要求的話;
六、preaccess
訪問權限檢查準備階段,ngx_limit_req和ngx_limit_zone在這個階段運行,ngx_limit_req能夠控制請求的訪問頻率,ngx_limit_zone能夠控制訪問的併發度;
七、access
權限檢查階段,ngx_access在這個階段運行,配置指令可能是執行訪問控制相關的任務,如檢查用戶的訪問權限,檢查用戶的來源IP是否合法;
八、post-access
訪問權限檢查提交階段;
九、try-files
配置項try_files處理階段;
十、content
內容產生階段,是全部請求處理階段中最爲重要的階段,由於這個階段的指令一般是用來生成HTTP響應內容的;
十一、log
日誌模塊處理階段;
# 設置純 Lua 擴展庫的搜尋路徑(';;' 是默認路徑): lua_package_path '/foo/bar/?.lua;/blah/?.lua;;'; # 設置 C 編寫的 Lua 擴展模塊的搜尋路徑(也能夠用 ';;'): lua_package_cpath '/bar/baz/?.so;/blah/blah/?.so;;';
access_by_lua_file lua腳本文件; 准入階段完成參數驗證
content_by_lua_block{書寫lua腳本區域}; 內容產生階段的lua腳本
client_body_in_file_only on;強制請求body到臨時文件中
lua_code_cache off;//lua腳本緩存關閉 生產環境務必要設置成on
internal;標記只能內部使用,即由ngx.location.capture或ngx.location.capture_multi調用
ngx.req請求內容
ngx.ctx 用於保存每一個請求的上下文,數據共享;;;注意開銷較大(本人未驗證https://moonbingbing.gitbooks.io/openresty-best-practices/content/openresty/share_var.html)
ngx.var.request_method請求方法
ngx.var.remote_addr客戶端ip
nginx.log(日誌級別, 參數。。。)生成日誌
ngx.STDERR -- 標準輸出 ngx.EMERG -- 緊急報錯 ngx.ALERT -- 報警 ngx.CRIT -- 嚴重,系統故障,觸發運維告警系統 ngx.ERR -- 錯誤,業務不可恢復性錯誤 ngx.WARN -- 告警,業務中可忽略錯誤 ngx.NOTICE -- 提醒,業務比較重要信息 ngx.INFO -- 信息,業務瑣碎日誌信息,包含不一樣狀況判斷等 ngx.DEBUG -- 調試
ngx.now()當前時間戳
ngx.say()異步輸出 比print會多輸出一個\n
ngx.print()異步輸出
ngx.flush()顯式的向客戶端輸出響應
ngx.sleep(s)暫停S秒
ngx.req.get_headers()獲取請求頭信息
ngx.req.get_body_file()獲取上傳的文件
ngx.req.get_uri_args()獲取uri參數
ngx.req.read_body()讀取body
ngx.req.get_body_data()獲取符合http協議的請求體,不是普通的字符串。
須要指定lua_need_request_body on;指令
ngx.req.get_body_file()獲取請求body的臨時文件內容
ngx.req.get_post_args()獲取post請求參數,必定要先執行ngx.req.read_body()
ngx.req.start_time()請求開始時間
ngx.encode_agrs()對請求參數進行轉義即其餘語言的urlencode
ngx.location.capture(location, {參數體})調用其餘location 一個同步非阻塞的NGINX子請求uri
ngx.location.capture_multi({
{location1,{參數體1}},
{location2,{參數體2}},
})並行調用兩個location
ngx.exec() 主要實現的是內部的重定向,等價於rewrite指令 ; 該方法不會主動返回,所以,強烈建議在調用該方法時,最好顯式加上return
nginx.redirect(url)該方法會給客戶端返回一個301/302重定向,具體是301仍是302取決於設定的status值,若是不指定status值,默認是返回302 .
ngx.exit()退出
1.content_by_lua_block openresty 1.7.10.1不可用,視乎是在1.9.x開始支持
2.content_by_lua_file path path若是使用相對路徑是啓動時-p參數指定的根路徑不然默認是nginx安裝路徑做爲根路徑
3.Nginx內核規定一次能夠發起的子請求的個數不能超過50個
4.只有當lua_code_cache設置爲on時鏈接池才生效。
中文文檔:https://github.com/iresty/nginx-lua-module-zh-wiki
OpenResty 最佳實踐
https://www.gitbook.com/book/moonbingbing/openresty-best-practices/details
http://zivn.me/2013/08/05/something-about-openresty/
wiki:https://www.openresty.com.cn/nginx-lua-module-zh-wiki.html