admin管理员组文章数量:1602009
目录
- 环境搭配入门
- openresty的Windows版启动方法以及HelloWorld:
- 1、下载解压后修改以下文件
- 2、新建文件:
- 3、启动nginx.exe
- 4、调试时候使用cmd输入命令
- 成功截图(浏览器,极速模式):
- 基础学习
- 参考资料(从上到下按推荐度及复杂度排序)
- 个人学习笔记
- 基础函数
- 注释
- 循环
- 条件判断
- Lua 字符串
- 字符串查找关键字
- 转换为ascii码
- 字符串长度
- 字符串截取
- 字符串格式化
- 数组
由于公司需要构建软waf(根据应用出口进行防护),在已经有各类标准防火墙以及各种防护的情况下,按照应用特色进行高级防护,以达到在应用访问层面上防住嗅探和漏扫攻击以及特色攻击(比如0day漏洞)的目的。
最终要求实现一个联动的防火墙配置,选用了openresty作为技术栈。
由于本人也是从网络上各类资源当中搜集资料,lua这种小众语言(相对于java、php等大佬来说)没有太好的生态,特此发文记录学习过程以及笔记。本文不断更新,愿意一起学习的可以评论中交流共勉。
邮箱wwppp987@qq,有需求的可以发邮件或者私信交流。谢谢!
环境搭配入门
技术环境:Windows10、openresty、idea/HbuilderX。
(别问我为啥不是linux,问就是嫌麻烦。)
学习版本,直接放教程。想深入研究的,请找相应详细链接(本文涉及的教程和文章链接都会注明出处,请放心食用)。
程序下载地址:
http://openresty/cn/download.html
官网教程(纯英文的,使用谷歌翻译看完了,帮助有限)
https://github/openresty/lua-nginx-module#name
中文技术文档(喜欢啃书的建议直接看)
https://www.runoob/lua/lua-basic-syntax.html
openresty的Windows版启动方法以及HelloWorld:
1、下载解压后修改以下文件
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;
}
2、新建文件:
\openresty-1.21.4.1rc1-win64\lua\hello.lua
ngx.say('hello world!!!')
3、启动nginx.exe
4、调试时候使用cmd输入命令
nginx -s -reload
效果截图:
提示为告警:已关闭缓存模式
成功截图(浏览器,极速模式):
基础学习
参考资料(从上到下按推荐度及复杂度排序)
首推:
Openresty最佳案例 | 汇总(从中选择第四篇开始看即可,有利于提高自信心)
https://blog.csdn/forezp/article/details/78616856
第四篇直通车:
https://blog.csdn/weixin_30644369/article/details/98955888
中文技术文档(喜欢啃书的建议直接看)【刚才放出来了,再放一遍,真的很重要】
https://www.runoob/lua/lua-basic-syntax.html
OpenResty(nginx+lua) 开发入门(看出来了,作者是真的试图教懂我们)
https://blog.csdn/enweitech/article/details/78519398
官方维基教程(经常打不开,各种小毛病)
https://wiki.jikexueyuan/project/openresty/README.html
腾讯出品(Lua语言、Nginx语言技术文档)【全面、晦涩】腾讯云文档,各类教程从bootstrap到Yii都在里面。很全面,嗯……只能说很全面……(但是没有针对openresty的)
https://cloud.tencent/developer/section/1489385
进阶:
Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解(简易进阶)
https://wwwblogs/tinywan/p/6538006.html
学习使用nginx echo模块(中等进阶)
https://xuexb/post/nginx-echo-module.html?utm_source=tuicool&utm_medium=referral#toc-e65
OpenResty+Lua限流实战
https://blog.csdn/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
效果
postman中:
注释
循环
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/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
Lua 字符串
字符串或串(String)是由数字、字母、下划线组成的一串字符。
Lua 语言中字符串可以使用以下三种方式来表示:
单引号间的一串字符。
双引号间的一串字符。
[[ 与 ]] 间的一串字符。
字符串查找关键字
string.find("Hello Lua user", "Lua", 1)
返回79
参数1删除无影响,有2个以上的关键字只返回第一个。
转换为ascii码
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()。
以下实例演示了如何对字符串进行格式化操作:
格式字符串可能包含以下的转义码:
- %c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
- %d, %i - 接受一个数字并将其转化为有符号的整数格式
- %o - 接受一个数字并将其转化为八进制数格式
- %u - 接受一个数字并将其转化为无符号整数格式
- %x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
- %X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
- %e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
- %E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
- %f - 接受一个数字并将其转化为浮点数格式
- %g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
- %q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
- %s - 接受一个字符串并按照给定的参数格式化该字符串
为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入:
- (1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号.
- (2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
- (3) 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.
- (4) 宽度数值
- (5) 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位.
实例
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开始的。
本文标签: 学习笔记福利OpenrestyWindowsLua
版权声明:本文标题:openresty学习笔记(windows版),nginx+lua学习笔记——不停更新【伸手党福利】 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728380154a1156405.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论