博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx的lua api
阅读量:5809 次
发布时间:2019-06-18

本文共 3114 字,大约阅读时间需要 10 分钟。

  hot3.png

##基本api

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 体内容字符串。

###ngx.redirect 重定向; ###ngx.status= 状态码 设置响应的状态码; ###ngx.resp.get_headers() 获取设置的响应状态码; ###ngx.send_headers() 发送响应状态码,当调用 ngx.say/ngx.print 时自动发送响应状态码;可以通过 ngx.headers_sent=true 判断是否发送了响应状态码。

###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, "
") ngx.say("ngx.var.b : ", var.b, "
") ngx.say("ngx.var[2] : ", var[2], "
") ngx.var.b = 2; ngx.say("
") --请求头 local headers = ngx.req.get_headers() ngx.say("headers begin", "
") ngx.say("Host : ", headers["Host"], "
") ngx.say("user-agent : ", headers["user-agent"], "
") ngx.say("user-agent : ", headers.user_agent, "
") for k,v in pairs(headers) do if type(v) == "table" then ngx.say(k, " : ", table.concat(v, ","), "
") else ngx.say(k, " : ", v, "
") end end ngx.say("headers end", "
") ngx.say("
") --get请求uri参数 ngx.say("uri args begin", "
") 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, ", "), "
") else ngx.say(k, ": ", v, "
") end end ngx.say("uri args end", "
") ngx.say("
") --post请求参数 ngx.req.read_body() ngx.say("post args begin", "
") 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, ", "), "
") else ngx.say(k, ": ", v, "
") end end ngx.say("post args end", "
") ngx.say("
") --请求的http协议版本 ngx.say("ngx.req.http_version : ", ngx.req.http_version(), "
") --请求方法 ngx.say("ngx.req.get_method : ", ngx.req.get_method(), "
") --原始的请求头内容 ngx.say("ngx.req.raw_header : ", ngx.req.raw_header(), "
") --请求的body内容体 ngx.say("ngx.req.get_body_data() : ", ngx.req.get_body_data(), "
") ngx.say("
") --未经解码的请求uri local request_uri = ngx.var.request_uri; ngx.say("request_uri : ", request_uri, "
"); --解码 ngx.say("decode request_uri : ", ngx.unescape_uri(request_uri), "
"); --MD5 ngx.say("ngx.md5 : ", ngx.md5("123"), "
") --http time ngx.say("ngx.http_time : ", ngx.http_time(ngx.time()), "
")

##resp实例

--写响应头  ngx.header.a = "1"  --多个响应头可以使用table  ngx.header.b = {"2", "3"}  --输出响应  ngx.say("a", "b", "
") ngx.print("c", "d", "
") --200状态码退出 return ngx.exit(200) ngx.header:输出响应头;ngx.print:输出响应内容体;ngx.say:通ngx.print,但是会最后输出一个换行符;ngx.exit:指定状态码退出。

##doc

转载于:https://my.oschina.net/go4it/blog/782523

你可能感兴趣的文章
论模式在领域驱动设计中的重要性
查看>>
国内首例:飞步无人卡车携手中国邮政、德邦投入日常运营
查看>>
微软将停止对 IE 8、9和10的支持
查看>>
微服务架构会和分布式单体架构高度重合吗
查看>>
如何测试ASP.NET Core Web API
查看>>
《The Age of Surge》作者访谈
查看>>
测试人员的GitHub
查看>>
Spring Web Services 3.0.4.RELEASE和2.4.3.RELEASE发布
查看>>
有关GitHub仓库分支的几个问题
查看>>
无服务器计算的黑暗面:程序移植没那么容易
查看>>
云原生的浪潮下,为什么运维人员适合学习Go语言?
查看>>
Webpack入门教程三十
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Kali linux virtualbox rc=1908 错误解决办法
查看>>
linux软件包管理之三(源代码安装)
查看>>
数据库三范式是什么?
查看>>
[转载]设置Ubuntu自动连接无线,无须再输入密钥环和无线密码
查看>>
九叔Xen App测试报告
查看>>
Apache配置
查看>>