nginx的lua api

基本api

ngx.var

nginx 變量,若是要賦值如 ngx.var.b = 2,此變量必須提早聲明;另外對於 nginx location 中使用正則捕獲的捕獲組可使用 ngx.var [捕獲組數字]獲取;html

ngx.req.get_headers

獲取請求頭,默認只獲取前100,若是想要獲取因此能夠調用ngx.req.get_headers(0);獲取帶中劃線的請求頭時請使用如 headers.user_agent 這種方式;若是一個請求頭有多個值,則返回的是 table;nginx

ngx.req.get_uri_args

獲取 url 請求參數,其用法和 get_headers 相似;git

ngx.req.get_post_args

獲取 post 請求內容體,其用法和 get_headers 相似,可是必須提早調用 ngx.req.read_body() 來讀取 body 體(也能夠選擇在 nginx 配置文件使用lua_need_request_body on;開啓讀取 body 體,可是官方不推薦);github

ngx.req.raw_header

未解析的請求頭字符串;正則表達式

ngx.req.get_body_data

爲解析的請求 body 體內容字符串。api

ngx.redirect

重定向;post

ngx.status= 狀態碼

設置響應的狀態碼;編碼

ngx.resp.get_headers()

獲取設置的響應狀態碼;lua

ngx.send_headers()

發送響應狀態碼,當調用 ngx.say/ngx.print 時自動發送響應狀態碼;能夠經過 ngx.headers_sent=true 判斷是否發送了響應狀態碼。url

ngx.escape_uri/ngx.unescape_uri

uri 編碼解碼;

ngx.encode_args/ngx.decode_args

參數編碼解碼;

ngx.encode_base64/ngx.decode_base64

BASE64 編碼解碼;

ngx.re.match

nginx 正則表達式匹配;

var及req實例

--nginx變量  
local var = ngx.var  
ngx.say("ngx.var.a : ", var.a, "<br/>")  
ngx.say("ngx.var.b : ", var.b, "<br/>")  
ngx.say("ngx.var[2] : ", var[2], "<br/>")  
ngx.var.b = 2;  

ngx.say("<br/>")  

--請求頭  
local headers = ngx.req.get_headers()  
ngx.say("headers begin", "<br/>")  
ngx.say("Host : ", headers["Host"], "<br/>")  
ngx.say("user-agent : ", headers["user-agent"], "<br/>")  
ngx.say("user-agent : ", headers.user_agent, "<br/>")  
for k,v in pairs(headers) do  
    if type(v) == "table" then  
        ngx.say(k, " : ", table.concat(v, ","), "<br/>")  
    else  
        ngx.say(k, " : ", v, "<br/>")  
    end  
end  
ngx.say("headers end", "<br/>")  
ngx.say("<br/>")  

--get請求uri參數  
ngx.say("uri args begin", "<br/>")  
local uri_args = ngx.req.get_uri_args()  
for k, v in pairs(uri_args) do  
    if type(v) == "table" then  
        ngx.say(k, " : ", table.concat(v, ", "), "<br/>")  
    else  
        ngx.say(k, ": ", v, "<br/>")  
    end  
end  
ngx.say("uri args end", "<br/>")  
ngx.say("<br/>")  

--post請求參數  
ngx.req.read_body()  
ngx.say("post args begin", "<br/>")  
local post_args = ngx.req.get_post_args()  
for k, v in pairs(post_args) do  
    if type(v) == "table" then  
        ngx.say(k, " : ", table.concat(v, ", "), "<br/>")  
    else  
        ngx.say(k, ": ", v, "<br/>")  
    end  
end  
ngx.say("post args end", "<br/>")  
ngx.say("<br/>")  
--請求的http協議版本  
ngx.say("ngx.req.http_version : ", ngx.req.http_version(), "<br/>")  
--請求方法  
ngx.say("ngx.req.get_method : ", ngx.req.get_method(), "<br/>")  
--原始的請求頭內容  
ngx.say("ngx.req.raw_header : ",  ngx.req.raw_header(), "<br/>")  
--請求的body內容體  
ngx.say("ngx.req.get_body_data() : ", ngx.req.get_body_data(), "<br/>")  
ngx.say("<br/>") 

--未經解碼的請求uri  
local request_uri = ngx.var.request_uri;  
ngx.say("request_uri : ", request_uri, "<br/>");  
--解碼  
ngx.say("decode request_uri : ", ngx.unescape_uri(request_uri), "<br/>");  
--MD5  
ngx.say("ngx.md5 : ", ngx.md5("123"), "<br/>")  
--http time  
ngx.say("ngx.http_time : ", ngx.http_time(ngx.time()), "<br/>")

resp實例

--寫響應頭  
ngx.header.a = "1"  
--多個響應頭可使用table  
ngx.header.b = {"2", "3"}  
--輸出響應  
ngx.say("a", "b", "<br/>")  
ngx.print("c", "d", "<br/>")  
--200狀態碼退出  
return ngx.exit(200)  
ngx.header:輸出響應頭;
ngx.print:輸出響應內容體;
ngx.say:通ngx.print,可是會最後輸出一個換行符;
ngx.exit:指定狀態碼退出。

doc

相關文章
相關標籤/搜索