资讯专栏INFORMATION COLUMN

nginx的lua api

FreeZinG / 3545人阅读

摘要:重定向状态码设置响应的状态码获取设置的响应状态码发送响应状态码,当调用时自动发送响应状态码可以通过判断是否发送了响应状态码。

基本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实例

</>复制代码

  1. --nginx变量
  2. local var = ngx.var
  3. ngx.say("ngx.var.a : ", var.a, "
    ")
  4. ngx.say("ngx.var.b : ", var.b, "
    ")
  5. ngx.say("ngx.var[2] : ", var[2], "
    ")
  6. ngx.var.b = 2;
  7. ngx.say("
    ")
  8. --请求头
  9. local headers = ngx.req.get_headers()
  10. ngx.say("headers begin", "
    ")
  11. ngx.say("Host : ", headers["Host"], "
    ")
  12. ngx.say("user-agent : ", headers["user-agent"], "
    ")
  13. ngx.say("user-agent : ", headers.user_agent, "
    ")
  14. for k,v in pairs(headers) do
  15. if type(v) == "table" then
  16. ngx.say(k, " : ", table.concat(v, ","), "
    ")
  17. else
  18. ngx.say(k, " : ", v, "
    ")
  19. end
  20. end
  21. ngx.say("headers end", "
    ")
  22. ngx.say("
    ")
  23. --get请求uri参数
  24. ngx.say("uri args begin", "
    ")
  25. local uri_args = ngx.req.get_uri_args()
  26. for k, v in pairs(uri_args) do
  27. if type(v) == "table" then
  28. ngx.say(k, " : ", table.concat(v, ", "), "
    ")
  29. else
  30. ngx.say(k, ": ", v, "
    ")
  31. end
  32. end
  33. ngx.say("uri args end", "
    ")
  34. ngx.say("
    ")
  35. --post请求参数
  36. ngx.req.read_body()
  37. ngx.say("post args begin", "
    ")
  38. local post_args = ngx.req.get_post_args()
  39. for k, v in pairs(post_args) do
  40. if type(v) == "table" then
  41. ngx.say(k, " : ", table.concat(v, ", "), "
    ")
  42. else
  43. ngx.say(k, ": ", v, "
    ")
  44. end
  45. end
  46. ngx.say("post args end", "
    ")
  47. ngx.say("
    ")
  48. --请求的http协议版本
  49. ngx.say("ngx.req.http_version : ", ngx.req.http_version(), "
    ")
  50. --请求方法
  51. ngx.say("ngx.req.get_method : ", ngx.req.get_method(), "
    ")
  52. --原始的请求头内容
  53. ngx.say("ngx.req.raw_header : ", ngx.req.raw_header(), "
    ")
  54. --请求的body内容体
  55. ngx.say("ngx.req.get_body_data() : ", ngx.req.get_body_data(), "
    ")
  56. ngx.say("
    ")
  57. --未经解码的请求uri
  58. local request_uri = ngx.var.request_uri;
  59. ngx.say("request_uri : ", request_uri, "
    ");
  60. --解码
  61. ngx.say("decode request_uri : ", ngx.unescape_uri(request_uri), "
    ");
  62. --MD5
  63. ngx.say("ngx.md5 : ", ngx.md5("123"), "
    ")
  64. --http time
  65. ngx.say("ngx.http_time : ", ngx.http_time(ngx.time()), "
    ")
resp实例

</>复制代码

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

Nginx+Lua 开发入门

lua-nginx-module#readme

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39369.html

相关文章

  • LuaNginx应用

    摘要:例如响应部分通过的形式获取或设置响应头信息。以某个状态码返回响应内容,状态码常量对应关系见部分,也支持数字形式的状态码。重定向当前请求到新的,响应状态码可选列表为默认。具体内容如下相关文章进入的世界在的应用 首发于 樊浩柏科学院 当 Nginx 标准模块和配置不能灵活地适应系统要求时,就可以考虑使用 Lua 扩展和定制 Nginx 服务。OpenResty 集成了大量精良的 Lua 库...

    Mike617 评论0 收藏0
  • nginx lua api解读

    摘要:对于需要进一步注意的是参数的使用,可以传入所定义的所有的状态码常量如等和两个模块内核常量只支持和这两个,如果传入其他的如等则进程住。 序 本文主要解读下nginx lua module的主要方法和api。 ngx_lua运行阶段 showImg(https://segmentfault.com/img/bVHFqI?w=1005&h=910); initialization phase...

    shery 评论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
  • nginxupstream异常

    摘要:异常与默认值为默认值为秒。实验请求里头的会发起一个,请求请求一次对逐个请求,都失败,则的返回,对返回的取决于脚本再请求一次该下面的都挂的情况下出现中健康检查机制深入分析容错机制原创胡志广线上的一次分析 异常 upstream server temporarily disabled while connecting to upstream no live upstreams while...

    kun_jian 评论0 收藏0
  • Nginx-深度学习篇

    摘要:深度学习篇一动静分离通过中间件将动态请求和静态请求进行分离。原因分离资源,减少不必要的请求消耗,减少请求延时。关闭后,重定向会失效。验证规则保持一致。启动,也会要求你输入密码。根据用户的信息等信息区别根据用户的地址实现灰度发布示意图 Nginx-深度学习篇 一、动静分离 通过中间件将动态请求和静态请求进行分离。原因:分离资源,减少不必要的请求消耗,减少请求延时。 动态和静态请求图例:s...

    wh469012917 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<