04-OpenResty ngx lua API介绍
PS :
- ngx lua 指令 https://www.nginx.com/resources/wiki/modules/lua/?highlight=http status constants#directives
- ngx lua api https://www.nginx.com/resources/wiki/modules/lua/?highlight=http status constants#nginx-api-for-lua
- 在OpenResty 中使用lua脚本时,尽量要调用 ngx lua api因为全部都是异步非阻塞的;
一、示例 :客户端提交base64数据,在lua解析后返回客户端
1.1、nginx conf
location /decode_info {
content_by_lua_file lua/decode_info.lua;
}
1.2、decode_info.lua
# vim lua/decode_info.lua
local json = require "cjson" -- require 表示引入一个库,引入cjosn
ngx.req.read_body() -- 调用 ngx lua api 获取http 请求 body
local args = ngx.req.get_post_args() -- 再次获取 post 参数
if not args or not args.info then -- 如果post请求的参数有为空的则通过 HTTP_BAD_REQUEST 抛出 400
ngx.exit(ngx.HTTP_BAD_REQUEST) -- ngx lua api
end
local client_ip = ngx.var.remote_addr -- ngx lua api ngx.var 表示获取nginx自己的值,remote_addr为nginx中的客户端地址
local user_agent = ngx.req.get_headers()['user-agent'] or '' -- 读取 post请求的头部信息,如果未读到则为空
local info = ngx.decode_base64(args.info) -- 使用ngx lua api base64 方法将post参数信息进行编码
local response = {}
response.info = info
response.ip = client_ip
response.user_agent = user_agent
ngx.say(json.encode(response))
1.3、访问测试
x# systemctl restart openresty
# curl -i --data 'info=5L2g5aW95ZWK77yMaGVsbG8gd29ybGQ=' http://127.0.0.1/decode_info
HTTP/1.1 200 OK
Server: openresty/1.19.3.1
Date: Tue, 18 May 2021 15:01:41 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Connection: keep-alive
{"ip":"127.0.0.1","user_agent":"curl\/7.58.0","info":"你好啊,hello world"}
向往的地方很远,喜欢的东西很贵,这就是我努力的目标。