技术环境:Windows10、openresty、idea/HbuilderX。
(别问我为啥不是linux,问就是嫌麻烦。)
学习版本,直接放教程。想深入研究的,请找相应详细链接(本文涉及的教程和文章链接都会注明出处,请放心食用)。
程序下载地址:
http://openresty.org/cn/download.html
官网教程(纯英文的,使用谷歌翻译看完了,帮助有限)
https://github.com/openresty/lua-nginx-module#name
中文技术文档(喜欢啃书的建议直接看)
https://www.runoob.com/lua/lua-basic-syntax.html
openresty-1.21.4.1rc1-win64\conf\nginx.conf
location / {
#修改为直接返回text模式,而不是返回文件。默认配置在极速模式下得浏览器会形成下载文件
default_type text/html;
#关闭缓存模式,每次都读取lua文件,不使用已经缓存的lua文件(修改nginx.conf文件还是要重启的)
lua_code_cache off;
#在返回节点加载lua文件(相对路径即可)
content_by_lua_file lua/hello.lua;
}
\openresty-1.21.4.1rc1-win64\lua\hello.lua
ngx.say('hello world!!!')
nginx -s -reload
首推:
Openresty最佳案例 | 汇总(从中选择第四篇开始看即可,有利于提高自信心)
https://blog.csdn.net/forezp/article/details/78616856
第四篇直通车:
https://blog.csdn.net/weixin_30644369/article/details/98955888
中文技术文档(喜欢啃书的建议直接看)【刚才放出来了,再放一遍,真的很重要】
https://www.runoob.com/lua/lua-basic-syntax.html
OpenResty(nginx+lua) 开发入门(看出来了,作者是真的试图教懂我们)
https://blog.csdn.net/enweitech/article/details/78519398
官方维基教程(经常打不开,各种小毛病)
https://wiki.jikexueyuan.com/project/openresty/README.html
腾讯出品(Lua语言、Nginx语言技术文档)【全面、晦涩】腾讯云文档,各类教程从bootstrap到Yii都在里面。很全面,嗯……只能说很全面……(但是没有针对openresty的)
https://cloud.tencent.com/developer/section/1489385
进阶:
Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解(简易进阶)
https://www.cnblogs.com/tinywan/p/6538006.html
学习使用nginx echo模块(中等进阶)
https://xuexb.com/post/nginx-echo-module.html?utm_source=tuicool&utm_medium=referral#toc-e65
OpenResty+Lua限流实战
https://blog.csdn.net/xvktdmjg/article/details/115100592
lua文件:
--获取url中a的值
ngx.say(ngx.var.arg_a);
--获取主机名
ngx.say(ngx.var.remote_addr);
--获取get和post参数
local arg = ngx.req.get_uri_args()
for k,v in pairs(arg) do
ngx.say("[GET ] key:", k, " v:", v)
end
ngx.req.read_body() -- 解析 body 参数之前一定要先读取 body
local arg = ngx.req.get_post_args()
for k,v in pairs(arg) do
ngx.say("[POST] key:", k, " v:", v)
end
for循环
for var=exp1,exp2,exp3 do
<执行体>
end
为每个数组元素循环(泛型for循环)
--days为table型,可以理解为数组。
days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
for i,v in ipairs(days) do
print(v)
end
https://www.runoob.com/lua/lua-for-loop.html
lua当中,false和nil为假,0为真。
--[ 0 为 true ]
if(0)
then
print("0 为 true")
end
if句式
if(布尔表达式)
then
--[ 布尔表达式为 true 时执行该语句块 --]
else
--[ 布尔表达式为 false 时执行该语句块 --]
end
if-elseif句式
if( 布尔表达式 1)
then
--[ 在布尔表达式 1 为 true 时执行该语句块 --]
elseif( 布尔表达式 2)
then
--[ 在布尔表达式 2 为 true 时执行该语句块 --]
elseif( 布尔表达式 3)
then
--[ 在布尔表达式 3 为 true 时执行该语句块 --]
else
--[ 如果以上布尔表达式都不为 true 则执行该语句块 --]
end
if-if句式
if( 布尔表达式 1)
then
--[ 布尔表达式 1 为 true 时执行该语句块 --]
if(布尔表达式 2)
then
--[ 布尔表达式 2 为 true 时执行该语句块 --]
end
end
字符串或串(String)是由数字、字母、下划线组成的一串字符。
Lua 语言中字符串可以使用以下三种方式来表示:
单引号间的一串字符。
双引号间的一串字符。
[[ 与 ]] 间的一串字符。
string.find("Hello Lua user", "Lua", 1)
返回79
参数1删除无影响,有2个以上的关键字只返回第一个。
string.byte("A")
返回65
string.len("abc")
返回3
-- 索引越界,输出原始字符串
local fourth_sub = string.sub(sourcestr, -100)
print("\n第四次截取", string.format("%q", fourth_sub))
注意,对于输入的字符串一定要使用string.format("%q", strings)
其中%q意为修改为lua语言能够安全读取的格式
Lua 提供了 string.format()
函数来生成具有特定格式的字符串, 函数的第一个参数是格式 , 之后是对应格式中每个代号的各种数据。
由于格式字符串的存在, 使得产生的长字符串可读性大大提高了。这个函数的格式很像 C 语言中的 printf()。
以下实例演示了如何对字符串进行格式化操作:
格式字符串可能包含以下的转义码:
为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入:
实例
string1 = "Lua"
string2 = "Tutorial"
number1 = 10
number2 = 20
-- 基本字符串格式化
print(string.format("基本格式化 %s %s",string1,string2))
-- 日期格式化
date = 2; month = 1; year = 2014
print(string.format("日期格式化 %02d/%02d/%03d", date, month, year))
-- 十进制格式化
print(string.format("%.4f",1/3))
结果:
基本格式化 Lua Tutorial
日期格式化 02/01/2014
0.3333
array = {"Lua", "Tutorial"}
ngx.say(array[1])
结果:
Lua
注意:在lua中,数组角标是从1开始的。