成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

nginx lua api解讀

shery / 833人閱讀

摘要:對(duì)于需要進(jìn)一步注意的是參數(shù)的使用,可以傳入所定義的所有的狀態(tài)碼常量如等和兩個(gè)模塊內(nèi)核常量只支持和這兩個(gè),如果傳入其他的如等則進(jìn)程住。

本文主要解讀下nginx lua module的主要方法和api。

ngx_lua運(yùn)行階段

initialization phase

init_by_lua

用在http模塊,常用于全局變量的申請(qǐng)

init_worker_by_lua

在每個(gè)nginx worker進(jìn)程啟動(dòng)時(shí)調(diào)用指定的lua代碼
rewrite / access phase

set_by_lua:

設(shè)置一個(gè)變量,計(jì)算變量供后續(xù)使用

rewrite_by_lua

可替代HttpRewriteModule的rewrite指令來使用的,優(yōu)先級(jí)低于rewrite指令

access_by_lua

可以用來修改請(qǐng)求參數(shù)
content phase

content_by_lua

由ngx返回內(nèi)容,而不走proxied后端

header_filter_by_lua

可以用來修改后端response的header

body_filter_by_lua

一般會(huì)在一次請(qǐng)求中被調(diào)用多次, 因?yàn)檫@是實(shí)現(xiàn)基于 HTTP 1.1 chunked 編碼的所謂“流式輸出”的。
log phase

log_by_lua

在請(qǐng)求結(jié)束的時(shí)候運(yùn)行,可以做些統(tǒng)計(jì)工作
nginx api for lua ngx.cookie_time
ngx.cookie_time(ngx.time() + 60 * 30) -- 設(shè)置Cookie過期時(shí)間為30分鐘
ngx.ctx
當(dāng)前請(qǐng)求的上下文
ngx.decode_args
decode為table
local decoded_uri=ngx.decode_args("arg1=day1&arg2= monday");
print_t(decoded_uri);
function print_t(t)
    for k, v in pairs(t) do
        if type(v) == table then
            ngx.say(k, ": ", table.concat(v), "
"); else ngx.say(k, ": ", v, "
"); end end end
ngx.encode_args
將table編碼為表單提交格式,a1=arg1&a2=arg2
ngx.say("encode args ", ngx.encode_args({a1="arg1", a2="arg2"}), "
");
ngx.eof
標(biāo)識(shí)response結(jié)束,ngx.eof()只是結(jié)束響應(yīng)流的輸出,中斷HTTP連接,后面的代碼邏輯還會(huì)繼續(xù)在服務(wù)端執(zhí)行
ngx.req.read_body()
local uri_args = ngx.req.get_uri_args(1)
ngx.say(cjson.encode{result="refuse"})
ngx.eof()
ngx.escape_uri
uri編碼
local fileName = "專輯列表.csv"
ngx.header.content_type = "text/csv;charset=utf-8"
ngx.header["Content-disposition"] = "attachment;filename=" .. ngx.escape_uri(fileName)
ngx.exec
內(nèi)部重定向
location /foo {
    content_by_lua "
        return ngx.exec("/some-location", "a=3&b=5&c=6");
    ";
}
ngx.exit
當(dāng)傳入的status >= 200(200即為ngx.HTTP_OK),ngx.exit() 會(huì)中斷當(dāng)前請(qǐng)求,并將傳入的狀態(tài)碼(status)返回給nginx。

當(dāng)傳入的status == 0(0即為ngx.OK)則 ngx.exit() 會(huì)中斷當(dāng)前執(zhí)行的phrase(ngx-lua模塊處理請(qǐng)求的階段,如content_by_lua*),進(jìn)而繼續(xù)執(zhí)行下面的phrase。

對(duì)于 ngx.exit() 需要進(jìn)一步注意的是參數(shù)status的使用,status可以傳入ngx-lua所定義的所有的HTTP狀態(tài)碼常量(如:ngx.HTTP_OK、ngx.HTTP_GONE、ngx.HTTP_INTERNAL_SERVER_ERROR等)和兩個(gè)ngx-lua模塊內(nèi)核常量(只支持NGX_OK和NGX_ERROR這兩個(gè),如果傳入其他的如ngx.AGAIN等則進(jìn)程hang?。?。

文檔中推薦的 ngx.exit() 最佳實(shí)踐是同 return 語句組合使用,目的在于增強(qiáng)請(qǐng)求被終止的語義(return ngx.exit(...))。

if not ngx.var.arg_token then
        ngx.log(ngx.ERR, "Unauthorized")
        return ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
配合使用return,增強(qiáng)退出語義,防止出錯(cuò)
ngx.flush
ngx.say("Hello, Lua!")
ngx.flush(true)
設(shè)置為true的話,則ngx.print或者ngx.say的內(nèi)容等寫入send buffer之后才返回
ngx.get_phase
返回當(dāng)前的處理階段,init, init_worker,
ssl_cert, set, rewrite, balancer, access, content, header_filter, body_filter, log, or
timer這幾個(gè)之一
ngx.http_time
ngx.header["Content-Type"]  = "application/json; charset=utf-8";
ngx.header["Expires"]       = ngx.http_time( ngx.time() + max_age );
ngx.say(ngx.http_time(1290079655))
-- yields "Thu, 18 Nov 2010 11:27:35 GMT"
ngx.is_subrequest
如果是subrequest則返回true
ngx.localtime
從NGINX"s cache中返回yyyy-mm-dd hh:mm:ss格式的時(shí)間
ngx.location.capture
用于子請(qǐng)求,返回: status, header, body, and truncated (a Boolean to represent if the body is truncated).
ngx.log
第一個(gè)參數(shù)是log基本(one of ngx.STDERR, ngx.EMERG, ngx.ALERT,ngx.CRIT, ngx.ERR, ngx.WARN, ngx.NOTICE, ngx.INFO, and ngx.DEBUG)
后續(xù)可以接多個(gè)參數(shù)來打印log
ngx.now
從NGINX"s cache返回epoch time以來的毫秒數(shù)
ngx.now() 是有誤差的,因?yàn)槭褂昧薾ginx 自身的時(shí)間緩存。對(duì)于精度要求較高的計(jì)時(shí),應(yīng)使用下面的調(diào)用序列:
ngx.update_time()
local now = ngx.now()

值得一提的是,ngx.now() 只有毫秒精度。

ngx.parse_http_time
 local time = ngx.parse_http_time("Thu, 18 Nov 2010 11:27:35 GMT")
 if time == nil then
     ...
 end
ngx.print
打印到response body.
ngx.say
打印到response body并換行
ngx.status
http status狀態(tài)碼
ngx.time
從nginx cached返回epoch time以來的秒數(shù)(no syscall involved unlike Lua"s date library).
ngx.today
從NGINX"s cache返回當(dāng)前日期,格式 yyyy-mm-dd
ngx.unescape_uri
ngx.say(ngx.unescape_uri("b%20r56+7"))
-- 返回b r56 7
ngx.update_time
更新NGINX"s time cache
ngx.utctime
從NGINX"s cache返回UTC time,格式y(tǒng)yyy-mm-dd hh:mm:ss
doc

nginx基本配置與參數(shù)說明

nginx配置文件說明

nginx與lua的執(zhí)行順序和步驟說明

ngx_lua用例說明

ngx_lua 模塊

lua-nginx-module模塊里ngx_lua的所有指令以及可用ngx所有方法

由一條OpenResty Error log談?wù)刵gx.exit與ngx.eof的區(qū)別

ngx_Lua模塊中的重定向

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39747.html

相關(guān)文章

  • LuaNginx的應(yīng)用

    摘要:例如響應(yīng)部分通過的形式獲取或設(shè)置響應(yīng)頭信息。以某個(gè)狀態(tài)碼返回響應(yīng)內(nèi)容,狀態(tài)碼常量對(duì)應(yīng)關(guān)系見部分,也支持?jǐn)?shù)字形式的狀態(tài)碼。重定向當(dāng)前請(qǐng)求到新的,響應(yīng)狀態(tài)碼可選列表為默認(rèn)。具體內(nèi)容如下相關(guān)文章進(jìn)入的世界在的應(yīng)用 首發(fā)于 樊浩柏科學(xué)院 當(dāng) Nginx 標(biāo)準(zhǔn)模塊和配置不能靈活地適應(yīng)系統(tǒng)要求時(shí),就可以考慮使用 Lua 擴(kuò)展和定制 Nginx 服務(wù)。OpenResty 集成了大量精良的 Lua 庫...

    Mike617 評(píng)論0 收藏0
  • 【技術(shù)干貨】聽阿里云CDN安防技術(shù)專家金九講tengine+lua開發(fā)

    摘要:例如設(shè)置響應(yīng)狀態(tài)碼并退出注意,設(shè)置狀態(tài)碼僅在響應(yīng)頭發(fā)送前有效,并且該函數(shù)調(diào)用之后該函數(shù)后面的將被忽略掉,因?yàn)橐呀?jīng)了。 一、介紹 二、安裝 三、運(yùn)行 四、開發(fā) 1. 介紹 Tengine:輕量級(jí)、高性能、高并發(fā)、配置化、模塊化、可擴(kuò)展、可移植的Web和反向代理 服務(wù)器,Tengine是nginx超集,但做了很多優(yōu)化,包含了很多比較有用的模塊,比如直接包含了lua、proc等很...

    番茄西紅柿 評(píng)論0 收藏0
  • 【技術(shù)干貨】聽阿里云CDN安防技術(shù)專家金九講tengine+lua開發(fā)

    摘要:例如設(shè)置響應(yīng)狀態(tài)碼并退出注意,設(shè)置狀態(tài)碼僅在響應(yīng)頭發(fā)送前有效,并且該函數(shù)調(diào)用之后該函數(shù)后面的將被忽略掉,因?yàn)橐呀?jīng)了。 一、介紹 二、安裝 三、運(yùn)行 四、開發(fā) 1. 介紹 Tengine:輕量級(jí)、高性能、高并發(fā)、配置化、模塊化、可擴(kuò)展、可移植的Web和反向代理 服務(wù)器,Tengine是nginx超集,但做了很多優(yōu)化,包含了很多比較有用的模塊,比如直接包含了lua、proc等很...

    Hegel_Gu 評(píng)論0 收藏0
  • nginx的upstream異常

    摘要:異常與默認(rèn)值為默認(rèn)值為秒。實(shí)驗(yàn)請(qǐng)求里頭的會(huì)發(fā)起一個(gè),請(qǐng)求請(qǐng)求一次對(duì)逐個(gè)請(qǐng)求,都失敗,則的返回,對(duì)返回的取決于腳本再請(qǐng)求一次該下面的都掛的情況下出現(xiàn)中健康檢查機(jī)制深入分析容錯(cuò)機(jī)制原創(chuàng)胡志廣線上的一次分析 異常 upstream server temporarily disabled while connecting to upstream no live upstreams while...

    kun_jian 評(píng)論0 收藏0
  • Nginx-深度學(xué)習(xí)篇

    摘要:深度學(xué)習(xí)篇一動(dòng)靜分離通過中間件將動(dòng)態(tài)請(qǐng)求和靜態(tài)請(qǐng)求進(jìn)行分離。原因分離資源,減少不必要的請(qǐng)求消耗,減少請(qǐng)求延時(shí)。關(guān)閉后,重定向會(huì)失效。驗(yàn)證規(guī)則保持一致。啟動(dòng),也會(huì)要求你輸入密碼。根據(jù)用戶的信息等信息區(qū)別根據(jù)用戶的地址實(shí)現(xiàn)灰度發(fā)布示意圖 Nginx-深度學(xué)習(xí)篇 一、動(dòng)靜分離 通過中間件將動(dòng)態(tài)請(qǐng)求和靜態(tài)請(qǐng)求進(jìn)行分離。原因:分離資源,減少不必要的請(qǐng)求消耗,減少請(qǐng)求延時(shí)。 動(dòng)態(tài)和靜態(tài)請(qǐng)求圖例:s...

    wh469012917 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

shery

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<