openresty开发系列13--lua基础语法2常用数据类型介绍 一)boolean(布尔)布尔类型,可选值 true/false: Lua 中 nil 和 false 为"假",其它所有值均为"真".比如 0 和空字符串就是"真": local a = truelocal b = 0local c = nil if a then    print("a")        -->output:aelse    prin…
openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息 为了实现业务系统针对不同地区IP访问,展示包含不同地区信息的业务交互界面.很多情况下系统需要根据用户访问的IP信息,判断用户可能的访问区域,针对不同的区域提供个性化的服务内容.本方案在CentOS7.6环境下基于高性能的Openresty1.13.6.1来实现. 方案介绍 要通过IP地址确认归属地,通常可以使用一些在线查询服务来实现,但使用在线服务查询潜在存在性能问题,同时通过lua来访问外部服务增加额外的代码…
一)需求背景现在app客户端请求后台服务是非常常用的请求方式,在我们写开放api接口时如何保证数据的安全,我们先看看有哪些安全性的问题 请求来源(身份)是否合法?请求参数被篡改?请求的唯一性(不可复制) 二)为了保证数据在通信时的安全性,我们可以采用参数签名的方式来进行相关验证案例:我们通过给某 [移动端(app)] 写 [后台接口(api)] 的案例进行分析:     客户端: 以下简称app后台接口:以下简称api 我们通过app查询产品列表这个操作来进行分析:app中点击查询按钮==>调用…
openresty开发系列15--lua基础语法4表table和运算符 lua中的表table 一)table (表)Table 类型实现了一种抽象的"关联数组".即可用作数组,也可以用作map.lua中没有数组和map,都是用table这个类型 --数组java   int[] intArr = new int[]{1,2,3,4,5,6};intArr[0]intArr[1]--map----> key value HashMap mapmap.add(key,value)…
openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)    function_body    return result_params_comma_separatedend optional_function_scope: 该参数是可选的制定函数是全局函数还是局部…
openresty开发系列24--openresty中lua的引入及使用 openresty 引入 lua 一)openresty中nginx引入lua方式 1)xxx_by_lua   --->字符串编写方式  2) xxx_by_lua_block ---->代码块方式  3) xxx_by_lua_file  ---->直接引用一个lua脚本文件 我们案例中使用内容处理阶段,用content_by_lua演示 -----------------编辑nginx.conf-------…
openresty开发系列38--通过Lua+Redis 实现动态封禁IP 一)需求背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单.对于黑名单之内的 IP ,拒绝提供服务. 二)设计方案实现 IP 黑名单的功能有很多途径:1.在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求:2.在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单:3.在应用层面,在请求服务之前检查一遍客户端 IP…
openresty开发系列33--openresty执行流程之3重写rewrite和重定向 重写rewrite阶段 1)重定向2)内部,伪静态 先介绍一下if,rewrite指令 一)if指令语法:if (condition){...}默认值:无作用域:server,location对给定的条件condition进行判断.如果为真,大括号内的指令将被执行. 上面的if和(之间需要留空格,否则会报错. 1)条件可以为一个变量 如果一个变量名进行条件判断,空字符串'' 或 字符串为'0',都表示为假…
openresty开发系列29--openresty中发起http请求 有些场景是需要nginx在进行请求转发 用户浏览器请求url访问到nginx服务器,但此请求业务需要再次请求其他业务:如用户请求订单服务获取订单详情,可订单详情中需要返回商品信息,也就需要再请求商品服务获取商品信息:这样就需要nginx需要有发起http请求的能力,而不是让用户浏览器再次请求商品信息 nginx服务发起http请求区分内部请求 和 外部请求 图解 下面我们就介绍一下,openResty中如何发起http请求?…
openresty开发系列16--lua中的控制结构if-else/repeat/for/while 一)条件 - 控制结构 if-else if-else 是我们熟知的一种控制结构.Lua 跟其他语言一样,提供了 if-else 的控制结构. )单个 if 分支 型 if 条件 then --body end 条件为真 ,执行if中的body ----------------------- x = then print("分支一") end ---- x = ) then print…