openresty中的lua语法说明,openrestylua语法



local arg = ngx.req.get_uri_args()

for k,v in pairs(arg) do

   ngx.say("[GET ] key:", k, " v:", v)

end

 

ngx.req.read_body() -- 解析 body 参数之前一定要先读取 body

local arg = ngx.req.get_post_args()

for k,v in pairs(arg) do

   ngx.say("[POST] key:", k, " v:", v)

end

在上述例子中有以下的api:

· ngx.req.get_uri_args 获取在uri上的get类型参数,返回的是一个table类型的数据结构。

· ngx.req.read_body 读取body,这在解析body之前,一定要先读取body

· ngx.req.get_post_args 获取form表单类型的参数,返回结果是一个table类型的数据。

 

获取http的其他方法

vim /usr/example/lua/lua_request.lua ,在原有的代码基础上,再添加一下代码:

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/>")

 

 

ngx.header.a="1"

ngx.header.b={"a","b"}

ngx.say("hello","</br>")

ngx.print("sss")

return ngx.exit(200)

上述代码中有以下api:

· ngx.header 向响应头输出内容

· ngx.say 输出响应体

· ngx.print输出响应体

· ngx.exit 指定http状态码退出

 


如上图所示,openresty的执行阶段分为

这样我们就可以根据我们的需要,在不同的阶段直接完成大部分典型处理了。

· set_by_lua* : 流程分支处理判断变量初始化

· rewrite_by_lua* : 转发、重定向、缓存等功能(例如特定请求代理到外网)

· access_by_lua* : IP 准入、接口权限等情况集中处理(例如配合 iptable 完成简单防火墙)

· content_by_lua* : 内容生成

· header_filter_by_lua* : 响应头部过滤处理(例如添加头部信息)

· body_filter_by_lua* : 响应体过滤处理(例如完成应答内容统一成大写)

执行阶段概念:

· log_by_lua* : 会话完成后本地异步完成日志记录(日志可以记录在本地,还可以同步到其 他机器
实际上我们只使用其中一个阶段

· content_by_lua* ,也可以完成所有的处理。但这样做,会让 我们的代码比较臃肿,越到后期越发难以维护。把我们的逻辑放在不同阶段,分工明确,代 码独立

 

相关内容

    暂无相关文章