https://github.com/openresty/lua-nginx-module#status
and逻辑与操作符。 “短路求值” 若 A 为 false,则返回 A,否则返回 B。(A and B) 为 false。
or逻辑或操作符。“短路求值” 若 A 为 true,则返回 A,否则返回 B。(A or B) 为 true。
lua中除了false和nil之外,其他所以数据,包括0、空字符串等都是true。
类型:
print(type("Hello world")) --> string
print(type(10.4*3)) --> number
print(type(print)) --> function
print(type(type)) --> function
print(type(true)) --> boolean
print(type(nil)) --> nil
print(type(type(X))) --> string
nil删除功能:对于全局变量和 table,nil 还有一个"删除"作用,给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉
nil 作比较时应该加上双引号 ": type(X)=="nil" --- true
Lua 把 false 和 nil 看作是"假",其他的都为"真":
字符串和数字:一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字
字符串连接:print("a" .. 'b') tonumber(字符串) -- tostring(bVar)
字符串长度:使用 # 来计算字符串的长度,放在字符串前面
table类型:
1、不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始
2、"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。
3、table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil
函数是被看作是"第一类值(First-Class Value)",函数可以存在变量里:
table类型是否为nil变量
function isTableEmpty(t)
if t == nil or _G.next(t) == nil then
return true
else
return false
end
end
全局变量和局部变量:a = 5 -- 全局变量 local b = 5 -- 局部变量
Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。
赋值规则:a. 变量个数 > 值的个数 按变量个数补足nil
b. 变量个数 < 值的个数 多余的值会被忽略
对 table 的索引使用方括号 []。Lua 也提供了 . 操作
循环:
while( true )
do
print("循环将永远执行下去")
end
if(0)
then
print("0 为 true")
end
for k, v in pairs(tab1) do
print(k .. " - " .. v)
end
函数:Lua函数可以返回多个结果值,比如string.find,其返回匹配串"开始和结束的下标"(如果不存在匹配串返回nil)。
Lua 函数可以接受可变数目的参数,和 C 语言类似,在函数参数列表中使用三点 ... 表示函数有可变的参数
我们也可以通过 select("#",...) 来获取可变参数的数量:
有时候我们可能需要几个固定参数加上可变参数,固定参数必须放在变长参数之前
通常在遍历变长参数的时候只需要使用 {…},然而变长参数可能会包含一些 nil,那么就可以用 select 函数来访问变长参数了:select('#', …) 或者 select(n, …)
select('#', …) 返回可变参数的长度
select(n, …) 用于访问 n 到 select('#',…) 的参数
table数结构:
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。
Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。
Lua table 是不固定大小的,你可以根据自己需要进行扩容。
Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format"来索引table string
https://github.com/openresty/lua-nginx-module#introduction
content_by_lua 是内容处理器,接受请求并输出响应,适用于location、location if。
access_by_lua 在请求访问阶段处理,用于访问控制,适用于http、server、location、location if。
rewrite_by_lua
set_by_lua
set_by_lua_file执行Nginx外部的lua脚本,可以避免在配置文件中使用大量的转义
location / {
rewrite_by_lua '
local res = ngx.location.capture("/check-spam")
if res.body == "spam" then
ngx.redirect("/terms-of-use.html")
end
'; fastcgi_pass ...;
}
location /echo {
default_type text/plain;
echo hello lua;
}
location /lua {
default_type text/plain;
content_by_lua 'ngx.say("hello world")';
}
ip禁止功能
location @client{
proxy_pass http://www.baidu.com;
}
location ~ /test {
default_type text/html;
content_by_lua 'ngx.say("this is ruifengyun.com!")';
access_by_lua '
if ngx.var.remote_addr == "10.2.20.110" then
ngx.exit(ngx.HTTP_FORBIDDEN)
end
if ngx.var.remote_addr == "10.2.20.112" then
ngx.exec("@client")
end
';
}
重定向转发-获取重定向的参数
location /foo {
content_by_lua_block {
ngx.exec("/bar", "a=goodbye");
}
}
location /bar {
default_type text/plain;
content_by_lua_block {
local args = ngx.req.get_uri_args()
for key, val in pairs(args) do
if key == "a" then
ngx.say(val)
end
end
}
}
nginx定义的变量 lua中可以获取
location /foo {
set $my_var ''; # this line is required to create $my_var at config time ngx.arg[1]可以获取定义的参数
content_by_lua_block {
ngx.var.my_var = 123;
...
}
}
删除变量 ngx.var.args = nil如:ngx.var.name = nil 删除nginx中name的变量
ngx.ctx-一个生命周期中共享变量
location /test {
rewrite_by_lua_block {
ngx.ctx.foo = 76
}
access_by_lua_block {
ngx.ctx.foo = ngx.ctx.foo + 3
}
content_by_lua_block {
ngx.say(ngx.ctx.foo)
}
}
ngx.HTTP_GET
ngx.HTTP_HEAD
ngx.HTTP_PUT
ngx.HTTP_POST
ngx.HTTP_DELETE
ngx.HTTP_OPTIONS (added in the v0.5.0rc24 release)
ngx.HTTP_MKCOL (added in the v0.8.2 release)
ngx.HTTP_COPY (added in the v0.8.2 release)
ngx.HTTP_MOVE (added in the v0.8.2 release)
ngx.HTTP_PROPFIND (added in the v0.8.2 release)
ngx.HTTP_PROPPATCH (added in the v0.8.2 release)
ngx.HTTP_LOCK (added in the v0.8.2 release)
ngx.HTTP_UNLOCK (added in the v0.8.2 release)
ngx.HTTP_PATCH (added in the v0.8.2 release)
ngx.HTTP_TRACE (added in the v0.8.2 release)
ngx.STDERR
ngx.EMERG
ngx.ALERT
ngx.CRIT
ngx.ERR
ngx.WARN
ngx.NOTICE
ngx.INFO
ngx.DEBUG
ngx.redirect("http://jd.com", 302)
value = ngx.HTTP_OK (200)
value = ngx.HTTP_CREATED (201)
value = ngx.HTTP_ACCEPTED (202) (first added in the v0.9.20 release)
ngx.req.read_body
打印日志:
ngx.log(log_level, ...)
ngx.log(ngx.NOTICE, ...)
ngx.header.content_type = 'text/plain';
ngx.header["X-My-Header"] = 'blah blah';
local request_time = ngx.now() - ngx.req.start_time()
ngx.req.get_method
ngx.req.set_method
重定向:
ngx.req.set_uri
ngx.req.set_uri("/foo", true)
ngx.req.get_uri_args
ngx.req.set_uri_args
local args, err = ngx.req.get_post_args()
ngx.req.get_headers
ngx.req.set_header
ngx.req.clear_header
ngx.req.read_body
ngx.req.get_body_file
ngx.req.set_body_data
ngx.redirect
ngx.print 没有回车
ngx.say 有回车
ngx.flush
ngx.exit(501) 返回状态吗,并直接退出
ngx.sleep
ngx.today
ngx.time
ngx.now
ngx.update_time
ngx.utctime
ngx.re.match
ngx.re.find
ngx.re.gmatch
ngx.re.sub
ngx.re.gsub
ngx.shared.DICT
local ok, err = ngx.timer.at(2, mylog ) 延时器,只会执行一次
--写响应头
ngx.header.a = "1"
--多个响应头可以使用table
ngx.header.b = {"2", "3"}
--输出响应
ngx.say("a", "b", "<br/>")
ngx.print("c", "d", "<br/>")
--200状态码退出
return ngx.exit(200)
必须调用exit给出状态码
ngx.say("api is offline!")
ngx.exit(200)
获取消息体,先打开获取消息体的开关:
ngx.req.read_body()
local data = ngx.req.get_body_data()
加载table.new这个模块,作用为:为新创建的table类型分配空间:ok, new_tab = pcall(require, "table.new")
resty.iputils 工具类使用:https://github.com/hamishforbes/lua-resty-iputils
https://www.kancloud.cn/allanyu/openresty-best-practices/82647
客户端的IP:ngx.var.binary_remote_addr
相关推荐
1. **Lua基础语法**:包括变量、数据类型(如数字、字符串、表、函数等)、控制结构(如if语句、循环)和函数的使用。 2. **Lua表操作**:Lua的核心特性是其灵活的表类型,可用于实现数组、哈希、对象等,理解其...
Lua是一种轻量级的脚本语言,它在设计上支持通用的过程...以上内容便是根据提供的文件信息整理的Lua语言的基础知识点,其涉及了Lua的设计理念、语言特性和基本语法。希望这些信息对于学习和使用Lua语言的用户有所帮助。
本文档主要根据 FinixLei 整理的 Lua 5.1 手册笔记进行提炼与总结,重点在于介绍 Lua 的基本数据类型及其用法。 #### 基本数据类型概述 在 Lua 中,存在多种基本的数据类型,包括 `nil`、`boolean`、`number`、`...
**七、`nginx`基础配置与管理** 1. **Server Name配置**:`server name`用于匹配请求的主机名,是`nginx`配置中的关键部分。 2. **`nginx`重启与热加载**:当`lua`代码变动后,可以通过`nginx`的平滑重启或热装载...
Lua是一种轻量级的脚本语言,常用于游戏开发、嵌入式系统和服务器配置等领域。...在处理"代码"目录下的源文件时,务必善用这类工具,以确保Lua代码的语法无误,为后续的运行和调试打下坚实的基础。
1. **Lua基础** - 变量:Lua中的变量无类型限制,使用`local`关键字声明,支持全局变量和局部变量。 - 数据类型:包括 nil, boolean, number, string, table, function, thread 和 userdata。 - 表(Table):...
准备阶段还需要将Lua源代码文件整理并放置于指定位置,例如`source/lua`目录下,并确保删除不必要的文件(如`makefile`、`lua.c`和`luac.c`)。这一步是为了简化之后的操作流程,确保移植过程更加顺畅。 **1.6 组织...
在深入探讨Lua的知识点之前,我们先明确一下,"lua2 我的学习资料"这个标题和描述并没有提供具体的信息,可能意味着这是个人整理的学习笔记或者是某门课程的教学材料。"课程资源"标签暗示这可能是一个完整的教学体系...
在Lua编程语言中,函数是核心的...以上是Lua中函数和面向对象编程的基础知识。掌握这些概念和技巧,将有助于编写更加灵活和结构化的Lua代码。通过深入理解并实践,开发者可以在Lua环境中有效地实现复杂的功能和系统。
这本书详细介绍了Lua语言的基础知识和实际应用,适用于想要深入了解Lua的开发者。 Lua是一种轻量级的脚本语言,广泛应用于嵌入应用程序中,它以简洁、高效和易于嵌入而闻名。Lua 5.3是这本书所描述的版本,新增了...
本文将深入探讨PHP技术中的几个重要知识点:Redis、Swoole、搜索引擎以及Lua,并结合面试题来帮助你巩固理解。...通过实际操作和练习,你将能更好地消化和运用这些知识,为你的IT事业打下坚实的基础。
### Lua编程语言基础语法知识点详解 #### 一、Lua简介 Lua是一种轻量级的、高效的脚本语言,被广泛应用于游戏开发、嵌入式系统、网页应用等多个领域。其简洁性、灵活性以及易于集成的特点使得Lua成为了很多开发者的...
### Lua脚本语言知识点 ...以上就是基于提供的内容所整理出的关键知识点,涵盖了Lua脚本的基础语法、函数定义、文件操作、变量管理等多个方面。希望这些内容能帮助你更好地理解和掌握Lua编程语言的核心要素。
### Lua中操作字符串的基本方法整理 #### 引言 在编程语言Lua中,字符串操作是一项基本而重要的技能。本文将详细介绍Lua中处理字符串的各种方法,包括字符串的初始化、字符串的操作函数(如大小写转换、子字符串...
至于【标签】中的“python”,说明资料主要侧重于Python编程,可能包括Python的基础语法、数据结构、函数、类、模块等知识,以及Python在网络编程中的应用。 最后,【压缩包子文件的文件名称列表】中提到的“文件夹...
本压缩包集合是个人整理和编写的ESP8266 Lua编程示例,包含了一系列实用的Demo,旨在帮助开发者更好地理解和掌握ESP8266的Lua编程。 首先,`led_controller.lua`是一个LED控制脚本,展示了如何通过Lua编程控制ESP...
### Lua基础语法 1. **变量声明与赋值**:Lua中的变量无需提前声明,直接赋值即可创建。如`a = 10`,`b = "Hello"`,Lua支持多种数据类型,包括数字、字符串、布尔、表、函数、用户数据和nil。 2. **表**:Lua的表...
这个开源项目不仅支持多种平台,如iOS、Android、Windows等,还允许开发者使用JavaScript和Lua进行开发。cocos2dx的核心特性包括渲染引擎、物理引擎、音频处理和动画系统等,使得开发者可以专注于游戏逻辑,而不用...
学习和理解这样的插件可以帮助你更深入地了解WOW的自定义机制,你可以根据需要修改代码,添加更多的功能,比如自动整理背包,或者显示特定类型物品的总价值。随着你对Lua和WOW API的熟悉,你会发现开发插件能够极大...
BabeLua是一款专为Visual Studio 2019(VS2019)设计的Lua语言插件,版本V3.2.2.0代表着该工具的最新迭代,它在原有的基础上进行了优化,确保了与VS2019的完美兼容。此插件的出现,极大地提升了VS2019中编写、调试和...