夜间模式暗黑模式
字体
阴影
滤镜
圆角
主题色
Lua+openresty学习记录
本文最后更新于 44 天前,其中的信息可能已经有所发展或是发生改变。

记录学习Openresty + lua 的一些知识

lua数据类型

数据类型描述
nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean包含两个值:false和true。
number表示双精度类型的实浮点数
string字符串由一对双引号或单引号来表示
function由 C 或 Lua 编写的函数
userdata表示任意存储在变量中的C数据结构
thread表示执行的独立线路,用于执行协同程序
tableLua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过”构造表达式”来完成,最简单构造表达式是{},用来创建一个空表。

type()

没有赋值的变量也就为nil类型

使用type得到的数据类型作比较时应加上双引号

因为 type(type(X))==string

table

相当于 关联数组 ,遍历表的方式:

pairs遍历table中的全部的key-vale,并非严格按照顺序

而ipairs会依据key的数值从1开始加1递增遍历相应的table[i]值

注意 Lua 中表的默认初始索引一般以 1 开始.

userdata(自定义类型)

userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。

从redis 中取数据时,若不存在所取的key,则返回值为 userdata 类型的null.

ngx.null

将lua 程序编译成二进制文件

lua本身可以使用luac将脚本编译为字节码

使用方法如下:

Lua 结合 nginx (openresty)

LuaNginxModule 的执行阶段说明

nginx 配置

ngx_lua_module api

lua Require 问题

默认寻找路径:

可通过lua_package_path来指定:

共享内存

ngx_lua 提供了一系列共享内存相关的 API (ngx.shared.DICT),可以很方便地通过设置过期时间来使得缓存被动过期,共享内存就是在内存块中分配出一个空间,让几个不相干的进程都能访问存储在这里面的变量数据。

当开辟的共享内存存满了之后,若继续插入,会使用强制删除(LRU算法)进行插入

LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。

lua+Redis

例子:ip动态封禁

ngx.var.VARIABLE

读或者写nginx的变量

仅仅是已经定义了的 Nginx 变量可以被写入

无法动态为nginx创建变量

设置 ngx.var.my_var 为 nil 值将会删除 $my_var Nginx 变量:

Lua Waf 老版本通用绕过 (lua-nginx-module < v0.10.13)

Nginx Lua获取参数时,默认获取前100个参数值,其余的将被丢弃。

https://www.freebuf.com/column/171728.html
暂无评论

发送评论 编辑评论


				
上一篇
下一篇