Lua简介
Lua
是一个简洁、轻量、可扩展的脚本语言 Lua教程
Nginx
和Lua
的结合能够充分结合Nginx
的并发处理epoll
优势和Lua
的轻量实现简单的功能且高并发的场景。
Lua 基础语法
安装解释器
1 | [root@hongshaorou ~]# yum install lua |
可以直接在shell环境下运行
1 | [root@hongshaorou ~]# lua |
也可以执行脚本
1 | test.lua |
注释
1 | -- 行注释 |
变量
1 | a = 'alo\n123"' |
布尔值只有nil
和false
是false
,数字0,''
空字符串(’\0`’)都是true。
lua中的变量如果没有特殊说明,全是全局变量,局部变量前面加个local。
while循环语句
1 | sum = 0 |
Lua没有 ++ 或是 +=这样的操作
if-else判断语句
1 | if age == 40 and sex == "Male" then |
~=
是不等于
字符串拼接操作符是..
io
库分别从stdin
和stdout
读写的函数为read
和write
。
Nginx + Lua环境
因为Nginx默认是不支持Lua的扩展模块的,我们需要下载一个笔Lua更高效的解释器–LuaJIT。
- 安装LuaJIT环境,比自带的lua解析器扩展模块多并且高效
1 | [root@xiaoyang download]# wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz |
下载ngx_devel_kit和lua-nginx-module
1 | [root@xiaoyang LuaJIT-2.0.2]# cd /opt/download |
- 重新编译Nginx 将ngx_devel_kit模块和lua-nginx-module模块编译进nginx
1 | # 查看已经编译的模块 |
添加ngx_devel_kit模块和lua-nginx-module模块添加到编译参数
加载lua库,加入到ld.so.conf文件
1 | [root@xiaoyang LuaJIT-2.0.2]# echo "/usr/local/LuaJIT/lib" >> /etc/ld.so.conf |
nginx调用lua模块指令
nginx的可插拔模块化加载执行,共11个处理阶段
参数 | 描述 |
---|---|
set_by_lua set_by_lua_file |
设置nginx变量,可以实现复杂的复杂逻辑 |
access_by_lua access_by_lua_file |
请求访问阶段处理,用于访问控制 |
content_by_lua content_by_lua_file |
内容处理容器,介绍请求处理并输出响应 |
File 表示Lua文件
Lua调用nginx的api
api | 描述 |
---|---|
ngx.var | nginx变量 |
ngx.req.get_headers | 获取请求头 |
ngx.req.get_uri_args | 获取url请求参数 |
ngx.redirect | 重定向 |
ngx.print | 输出响应内容体 |
ngx.say | 通ngx.print,但是最后会输出一个换行符 |
ngx.header | 输出响应头 |
… |
灰度发布
按照一定的关系区别 分部分的代码进行上线 使代码的发布能平滑过渡线上
我们可以使用以下场景区分用户访问不同的代码
- 用户的信息cookie等信息区别
- 根据用户的ip地址
上面的一个灰度发布使用Lua访问memcache进行查询校验哪些IP能够访问新的代码。