ngx lua API介绍
本节主要是带着大家简单的过一下常用的ngx_lua API。
一、nginx lua directives和api
ngx_lua 有60多个指令(Directive),140多个 API(截止到2019-3-26)。
官方lua文档:
https://www.nginx.com/resources/wiki/modules/lua/
https://github.com/openresty/lua-nginx-module
1、指令 是 ngx_lua 提供给Nginx调用的方法,与 Nginx自带的 location
、rewrite
等是一个级别的。指令有自己的作用域,例如:content_by_lua_file
只能作用于location
和location if
里面:
2、API 是指ngx_lua基于lua代码实现的一系列方法或常量,遵循 lua的语法规则。只能在lua代码块或者lua文件里使用。
例如:
content_by_lua 'ngx.say("<p>hello, world</p>")
';
其中content_by_lua
是指令,作用于location
块;ngx.say()
是 ngx_lua 提供的API。
在官方文档上可以找到指令及API所在的位置:
下面,我们使用 ngx_lua完成另外一个小功能:实现base64的解码并重新json编码输出。代码里会用到一些指令和API。
二、测试ngx lua API
lua代码:
nginx/conf/lua/decode_info.lua
-- 实现base64的解码并重新json编码输出local json = require "cjson"ngx.req.read_body()
local args = ngx.req.get_post_args()if not args or not args.info thenngx.exit(ngx.HTTP_BAD_REQUEST)
endlocal client_ip = ngx.var.remote_var or '127.0.0.1'
local user_agnet = ngx.req.get_headers()['user_agent'] or ''
local info = ngx.decode_base64(args.info)local res = {}
res.client_ip = client_ip
res.user_agnet = user_agnet
res.info = infongx.say(json.encode(res))
修改 nginx.conf ,新增:
location /decode_info {content_by_lua_file conf/lua/decode_info.lua;
}
$php -r "echo base64_encode('test');"
dGVzdA==
$ curl -XPOST -d "info=dGVzdA==" http://127.0.0.1:8080/decode_info
{"user_agnet":"curl\/7.19.7","client_ip":"127.0.0.1","info":"test"}
说明:
1、require
是 lua 里面引入其他库的关键字。这里引入的 cjson。
2、当我们要读取 http里的post数据的时候,就需要使用ngx.req.read_body()
。该API同步读取客户端请求主体而不阻塞Nginx事件循环。
3、ngx.req.get_post_args()
用于获取post请求数据。
4、ngx.var.remote_var
实际是获取的nginx里的变量remote_var
。也就是说,ngx.var.xxx
实际是获取的nginx里的变量xxx
。例如
nginx变量详见:[Alphabetical index of variables}(http://nginx.org/en/docs/varindex.html)。 ngx_lua ngx.var
API详见:ngx.var.VARIABLE。
5、ngx.req.get_headers()
用于读取nginx的header参数。返回的是lua table。
6、ngx.decode_base64()
用于 base64字符串解码。对应的编码API是 ngx.encode_base64()
。
ngx lua API介绍相关推荐
- 【精选】Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解
源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一.介绍 各种* _by_lua,* _by_lua_block和* _by_lua_file配置指令用 ...
- Nginx + Lua + API:实现精准城市级别的访问控制
文章目录 前言 安装环境 软件版本说明 luarocks 和 lua环境安装 LuaJIT安装 依赖库安装 nginx编译 API设置及调用 百度地图API 创建Lua调用API LUA脚本配置说明 ...
- HTML5 Audio标签方法和函数API介绍
问说网 > 文章教程 > 网页制作 > HTML5 Audio标签方法和函数API介绍 Audio APIHTML5HTML5 Audio预加载 HTML5 Audio标签方法和函 ...
- Servlet基础(一) Servlet基础和关键的API介绍
转载:http://www.cnblogs.com/mengdd/p/3202550.html Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解 Servlet基础(一) S ...
- Socket基础API介绍
文章目录 1 Socket基础API介绍 1 Socket基础API介绍 我们先来看下使用Socket API建立简易TCP服务端和客户端的步骤: 用Socket API建立简易TCP服务端: 建立一 ...
- 学习笔记Hadoop(十四)—— MapReduce开发入门(2)—— MapReduce API介绍、MapReduce实例
四.MapReduce API介绍 一般MapReduce都是由Mapper, Reducer 及main 函数组成. Mapper程序一般完成键值对映射操作; Reducer 程序一般完成键值对聚合 ...
- TEE Internal core API介绍(globalplatform)
目录 一.TEE的API介绍 1.Cryptographic Operations API 加解密函数介绍() (1).Generic Operation Functions TEE_Allocate ...
- Globalplatform TEE api介绍
文章目录 1.TEE API介绍 2.Client API : CA与TA通信的API介绍 3.TEE API : TA系统调用TEE OS的API (1).Asymmetric (2).Authen ...
- 组合筛选vue_Vue 3 组合式API介绍
组合式API介绍 通过创建 Vue 组件,我们可以将接口的可重复部分及其功能提取到可重用的代码段中.仅此一项就可以使我们的应用程序在可维护性和灵活性方面走得更远.然而,我们的经验已经证明,光靠这一点可 ...
最新文章
- 【Python】轻松识别文字,这款Python OCR库支持超过80种语言
- AI吉尼斯:那些你不知道的人工智能之“最”
- ORA-01111,ORA-01110,ORA-01157报错处理
- Linux操作oracle——关闭、停止、重启
- python私人兼职_python能做什么副业#下班后有哪些兼职副业
- 探索比特币源码4-JSON-RPC接口的其他调用方法
- Python爬虫 senlenium爬取拉勾网招聘数据,你学会了吗
- FastDFS+Nginx+Module
- mysql skip-grant-tables my.cnf_skip-grant-tables:修改mysql密码
- 我公司有个统计学的985应届(硕士)从事数据分析岗位
- samp服务器显示,如何测量我的(SAMP)服务器的带宽使用情况?
- oracle sqlplus客户端,sqlplus下载|oracle sqlplus windows 客户端工具 64位下载 - 3322软件站...
- 2011年美国大学电子电气工程-通讯工程专业研究生排名
- 【Lua 入门基础篇(七)】表模块与包
- K8s - 札记 - 脑裂
- Idea设置ALT+/代码提示
- ElasticSearch中什么是桶(bucket)?什么是度量(metrics)?
- vim配置即.vimrc文件的配置及vim操作技巧
- ffmpeg剪切视频的python小脚本
- Android百度地图屏蔽油站,怎么用android百度地图api获取离当前位置最近的加油站...
热门文章
- MySQL如何用一条SQL将一张表里的数据插入到另一张表
- 【IDEAEclipse】4、IntelliJ IDEA上操作GitHub
- oracle之完整性约束
- 8月第4周.COM域名总量达744万个 涨幅环比缩小
- Install Eclipse 3.7 Indigo and configure Eclipse
- Ant编译SWF、SWC例子脚本
- STM32开发笔记之——CMSIS DAP
- Mycat-server-1.6.5 常见分片方式
- 5.2.1.开启驱动开发之路
- 使用glob()查找文件