Openresty(十六)ngx_lua模块

一    openresty官方ngx_lua文档

核心:只介绍'与http相关'的,辅助'场景'理解

"nginx api for lua":指的就是在'nginx.conf文件'中用'*_by_lua' 和'*_by_lua_file'指令使用lua代码,为lua提供的专门的api

openresty的cors配置 

其它参考

NGINX API for Lua

①    获取url查询字符串

ngx.var.VARIABLE

Openresty(十六)ngx_lua模块_第1张图片

Openresty(十六)ngx_lua模块_第2张图片

1)差异

++++++++++++"共同点"++++++++++++

ngx.var.arg_xx与ngx.req.get_uri_args["xx"]两者都是为了获取请求uri 中的'查询字符串参数'

备注:get_uri_args,'get请求'传递的'查询字符串'

++++++++++++"差异点"++++++++++++

1)  当请求uri中有多个'同名参数'时,ngx.var.arg_xx的做法是取'第一个'出现值

2)  ngx.req_get_uri_args["xx"]的做法是返回一个table,该table里存放了该参数的'所有值'

2) 案例

1)  $query_string、 $arg_PARAMETER、 $http_NAME  -->"特殊" ,其它的是'nginx的变量'

2)  nginx '正则组捕获变量' $1, $2, $3 等等,也可以通过编写 ngx.var[1], ngx.var[2], ngx.var[3] 等来读取此接口

3)  设置 ngx.var.Foo 为 nil 值将会'删除' $Foo Nginx 变量:

   ngx.var.args = nil

3)测试 

Openresty(十六)ngx_lua模块_第3张图片

Openresty(十六)ngx_lua模块_第4张图片 

4)ngx.var[index]索引

Openresty(十六)ngx_lua模块_第5张图片

②    其它方法

print()                         # 与 ngx.print()方法有区别,print()相当于ngx.log()
ngx.ctx                         # 这是一个lua的table,用于保存ngx上下文的变量,在整个请求的生命周期内都有效
ngx.location.capture()          # 发出'一个子请求'
ngx.location.capture_multi()    # 发出多个子请求
ngx.status                      # 读或者写当前请求的相应状态,必须在输出相应头'之前'被调用 -->"响应码"
ngx.header.HEADER               # 访问或设置http header头信息
ngx.req.set_uri()               # 设置当前请求的URI
ngx.set_uri_args(args)          # 根据args参数'重新定义'当前请求的URI参数.
ngx.req.get_uri_args()          # 返回一个LUA TABLE,包含当前请求的'全部的URL参数'
ngx.req.get_post_args()         # 返回一个LUA TABLE,包括所有当前请求的'POST参数' -->"请求体"
ngx.req.get_headers()           # 返回一个"包含当前请求头"信息的lua table.
ngx.req.set_header()            # 设置当前请求头header某字段值,当前请求的子请求不会受到影响.
ngx.req.read_body()             # 在'不阻塞'ngnix其他事件的情况下同步读取客户端的body信息.
ngx.req.discard_body()          # 明确'丢弃'客户端请求的body
ngx.req.get_body_data()         # 以字符串的形式获得客户端的请求body内容
ngx.req.get_body_file()         # 当发送文件请求的时候,获得文件的名字 -->"重点"
ngx.req.set_body_data()         # 设置客户端请求的BODY
ngx.req.set_body_file()         # 通过filename来指定当前请求的file data
ngx.req.clear_header()          # 清求某个请求头
ngx.exec(uri,args)              # 执行内部跳转,根据uri和请求参数
ngx.redirect(uri, status)       # 执行301或者302的重定向
ngx.send_headers()              # 发送指定的响应头  -->"重点"
ngx.headers_sent                # 判断头部是否发送给客户端ngx.headers_sent=true
ngx.print(str)                  # 发送给客户端的响应页面
ngx.say()                       # 作用类似ngx.print,不过say方法输出后会"换行" -->"重要"
ngx.log(log.level,...)          # 写入nginx日志  -->"重要!"
ngx.flush()                     # 将缓冲区内容输出到页面(刷新响应)
ngx.exit(http-status)           # 结束请求并输出状态码
ngx.eof()                       # 明确指定关闭结束输出流
ngx.escape_uri()                # URI编码(本函数对逗号,不编码,而php的urlencode会编码)
ngx.unescape_uri()              # uri解码
ngx.encode_args(table)          # 将tabel解析成url参数
ngx.decode_args(uri)            # 将参数字符串编码为一个table
ngx.encode_base64(str)          # BASE64编码
ngx.decode_base64(str)          # BASE64解码
ngx.crc32_short(str)            # 字符串的crs32_short哈希
ngx.crc32_long(str)             # 字符串的crs32_long哈希
ngx.hmac_sha1(str)              # 字符串的hmac_sha1哈希
ngx.md5(str)                    # 返回16进制MD5
ngx.md5_bin(str)                # 返回2进制MD5
ngx.today()                     # 返回当前日期yyyy-mm-dd
ngx.time()                      # 返回当前时间戳
ngx.now()                       # 返回当前时间
ngx.update_time()               # 刷新后返回
ngx.localtime()                 # 返回 yyyy-mm-dd hh:ii:ss
ngx.utctime()                   # 返回yyyy-mm-dd hh:ii:ss格式的utc时间
ngx.cookie_time(sec)            # 返回用于COOKIE使用的时间
ngx.http_time(sec)              # 返回可用于http header使用的时间        
ngx.parse_http_time(str)        # 解析HTTP头的时间
ngx.is_subrequest               # 是否子请求(值为 true or false)
ngx.re.match(subject,regex,options,ctx)  # ngx正则表达式匹配,详细参考官网
ngx.re.gmatch(subject,regex,opt)         # 全局正则匹配
ngx.re.sub(sub,reg,opt)                  # 匹配和替换(未知)
ngx.re.gsub()                            # 未知

③  ngx.config

ngx.config.ngx_lua_version     #  当前ngx_lua模块版本号
ngx.config.nginx_version       #  nginx版本
ngx.worker.exiting             #  当前worker进程是否正在关闭
ngx.worker.pid                 #  当前worker进程的PID
ngx.config.nginx_configure     #  编译时的./configure命令选项
ngx.config.prefix              #  编译时的prefix选项

④  模拟执行时间

需求:计算'请求'的执行时间,'模拟'nginx中的 $request_time

ngx.update_time()

local request_time = ngx.now() - ngx.req.start_time()

⑤  关于方法 

Openresty(十六)ngx_lua模块_第6张图片

Openresty(十六)ngx_lua模块_第7张图片⑥    HTTP方法

Openresty(十六)ngx_lua模块_第8张图片

 ⑦    HTTP状态码

Openresty(十六)ngx_lua模块_第9张图片

⑧    日志级别

Openresty(十六)ngx_lua模块_第10张图片

你可能感兴趣的:(Openresty,lua)