成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

nginx lua api解讀

shery / 900人閱讀

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

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

ngx_lua運行階段

initialization phase

init_by_lua

用在http模塊,常用于全局變量的申請

init_worker_by_lua

在每個nginx worker進程啟動時調(diào)用指定的lua代碼
rewrite / access phase

set_by_lua:

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

rewrite_by_lua

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

access_by_lua

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

content_by_lua

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

header_filter_by_lua

可以用來修改后端response的header

body_filter_by_lua

一般會在一次請求中被調(diào)用多次, 因為這是實現(xiàn)基于 HTTP 1.1 chunked 編碼的所謂“流式輸出”的。
log phase

log_by_lua

在請求結(jié)束的時候運行,可以做些統(tǒng)計工作
nginx api for lua ngx.cookie_time
ngx.cookie_time(ngx.time() + 60 * 30) -- 設(shè)置Cookie過期時間為30分鐘
ngx.ctx
當(dā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)識response結(jié)束,ngx.eof()只是結(jié)束響應(yīng)流的輸出,中斷HTTP連接,后面的代碼邏輯還會繼續(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() 會中斷當(dāng)前請求,并將傳入的狀態(tài)碼(status)返回給nginx。

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

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

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

if not ngx.var.arg_token then
        ngx.log(ngx.ERR, "Unauthorized")
        return ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
配合使用return,增強退出語義,防止出錯
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這幾個之一
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格式的時間
ngx.location.capture
用于子請求,返回: status, header, body, and truncated (a Boolean to represent if the body is truncated).
ngx.log
第一個參數(shù)是log基本(one of ngx.STDERR, ngx.EMERG, ngx.ALERT,ngx.CRIT, ngx.ERR, ngx.WARN, ngx.NOTICE, ngx.INFO, and ngx.DEBUG)
后續(xù)可以接多個參數(shù)來打印log
ngx.now
從NGINX"s cache返回epoch time以來的毫秒數(shù)
ngx.now() 是有誤差的,因為使用了nginx 自身的時間緩存。對于精度要求較高的計時,應(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/39747.html

相關(guān)文章

  • LuaNginx的應(yīng)用

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

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

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

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

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

    Hegel_Gu 評論0 收藏0
  • nginx的upstream異常

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

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

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

    wh469012917 評論0 收藏0

發(fā)表評論

0條評論

shery

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<