參考於 http://jinnianshilongnian.iteye.com/blog/2186448 1、example.conf配置文件 location ~ /lua_request/(\d+)/(\d+) { #設置nginx變數 set $a $1; set $b $host; defa ...
參考於 http://jinnianshilongnian.iteye.com/blog/2186448
1、example.conf配置文件
location ~ /lua_request/(\d+)/(\d+) { #設置nginx變數 set $a $1; set $b $host; default_type "text/html"; #nginx內容處理 content_by_lua_file /usr/example/lua/test_request.lua; #內容體處理完成後調用 echo_after_body "ngx.var.b $b"; }View Code
test_request.lua
--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/>")View Code
ngx.var : nginx變數,如果要賦值如ngx.var.b = 2,此變數必須提前聲明;另外對於nginx location中使用正則捕獲的捕獲組可以使用ngx.var[捕獲組數字]獲取;
ngx.req.get_headers:獲取請求頭,預設只獲取前100,如果想要獲取所以可以調用ngx.req.get_headers(0);獲取帶中劃線的請求頭時請使用如headers.user_agent這種方式;如果一個請求頭有多個值,則返回的是table;
ngx.req.get_uri_args:獲取url請求參數,其用法和get_headers類似;
ngx.req.get_post_args:獲取post請求內容體,其用法和get_headers類似,但是必須提前調用ngx.req.read_body()來讀取body體(也可以選擇在nginx配置文件使用lua_need_request_body on;開啟讀取body體,但是官方不推薦);
ngx.req.raw_header:未解析的請求頭字元串;
ngx.req.get_body_data:為解析的請求body體內容字元串。
使用如下腳本測試
之前用curl等,沒想到wget還能發送post請求
wget --post-data 'a=1&b=2' 'http://127.0.0.1/lua_request/1/2?a=3&b=4' -O -