国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

nginx lua api解讀

shery / 829人閱讀

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

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

ngx_lua運行階段

initialization phase

init_by_lua

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

init_worker_by_lua

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

set_by_lua:

設置一個變量,計算變量供后續使用

rewrite_by_lua

可替代HttpRewriteModule的rewrite指令來使用的,優先級低于rewrite指令

access_by_lua

可以用來修改請求參數
content phase

content_by_lua

由ngx返回內容,而不走proxied后端

header_filter_by_lua

可以用來修改后端response的header

body_filter_by_lua

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

log_by_lua

在請求結束的時候運行,可以做些統計工作
nginx api for lua ngx.cookie_time
ngx.cookie_time(ngx.time() + 60 * 30) -- 設置Cookie過期時間為30分鐘
ngx.ctx
當前請求的上下文
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
標識response結束,ngx.eof()只是結束響應流的輸出,中斷HTTP連接,后面的代碼邏輯還會繼續在服務端執行
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
內部重定向
location /foo {
    content_by_lua "
        return ngx.exec("/some-location", "a=3&b=5&c=6");
    ";
}
ngx.exit
當傳入的status >= 200(200即為ngx.HTTP_OK),ngx.exit() 會中斷當前請求,并將傳入的狀態碼(status)返回給nginx。

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

對于 ngx.exit() 需要進一步注意的是參數status的使用,status可以傳入ngx-lua所定義的所有的HTTP狀態碼常量(如:ngx.HTTP_OK、ngx.HTTP_GONE、ngx.HTTP_INTERNAL_SERVER_ERROR等)和兩個ngx-lua模塊內核常量(只支持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)
設置為true的話,則ngx.print或者ngx.say的內容等寫入send buffer之后才返回
ngx.get_phase
返回當前的處理階段,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
第一個參數是log基本(one of ngx.STDERR, ngx.EMERG, ngx.ALERT,ngx.CRIT, ngx.ERR, ngx.WARN, ngx.NOTICE, ngx.INFO, and ngx.DEBUG)
后續可以接多個參數來打印log
ngx.now
從NGINX"s cache返回epoch time以來的毫秒數
ngx.now() 是有誤差的,因為使用了nginx 自身的時間緩存。對于精度要求較高的計時,應使用下面的調用序列:
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狀態碼
ngx.time
從nginx cached返回epoch time以來的秒數(no syscall involved unlike Lua"s date library).
ngx.today
從NGINX"s cache返回當前日期,格式 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,格式yyyy-mm-dd hh:mm:ss
doc

nginx基本配置與參數說明

nginx配置文件說明

nginx與lua的執行順序和步驟說明

ngx_lua用例說明

ngx_lua 模塊

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

由一條OpenResty Error log談談ngx.exit與ngx.eof的區別

ngx_Lua模塊中的重定向

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/39747.html

相關文章

  • LuaNginx的應用

    摘要:例如響應部分通過的形式獲取或設置響應頭信息。以某個狀態碼返回響應內容,狀態碼常量對應關系見部分,也支持數字形式的狀態碼。重定向當前請求到新的,響應狀態碼可選列表為默認。具體內容如下相關文章進入的世界在的應用 首發于 樊浩柏科學院 當 Nginx 標準模塊和配置不能靈活地適應系統要求時,就可以考慮使用 Lua 擴展和定制 Nginx 服務。OpenResty 集成了大量精良的 Lua 庫...

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

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

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

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

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

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

    kun_jian 評論0 收藏0
  • Nginx-深度學習篇

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

    wh469012917 評論0 收藏0

發表評論

0條評論

shery

|高級講師

TA的文章

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