nginx+lua
<h3 id="1-安装lua编译器LuaJIT"><a href="https://Seven-zhang.github.io/#1-%E5%AE%89%E8%A3%85lua%E7%BC%96%E8%AF%91%E5%99%A8LuaJIT" class="headerlink" title="1. 安装lua编译器LuaJIT"></a>1. 安装lua编译器LuaJIT</h3><figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">#wget http://luajit.org/download/LuaJIT-2.0.3.tar.gz</span><br><span class="line">#tar -xzvf LuaJIT-2.0.3.tar.gz</span><br><span class="line">#cd LuaJIT 2.0.3</span><br><span class="line">#make && make install</span><br></pre></td></tr></table></figure>
安装完成后配置环境变量,使nginx可找到luajit
#export LUAJIT_LIB=/usr/local/lib |
2. 下载lua模块,编译lua进nginx,nginx版本至少1.6.x
下载lua-nginx-module点击这里
下载ngx_devel_kit点击这里
#cd NGINX/NGINX-1.6.2/ |
启动nginx如报错(./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory),执行如下命令:
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
3. 测试是否成功
在nginx.conf中加入如下配置:
location /lua_content { |
通过命令curl -i http://ip:port/lua_content 返回hello world即成功
4. lua在nginx中的配置
#加载lua文档和so库文档,';;'代表默认路径 |
6. lua语法知识
6.1 安装lua 5.3.1
#curl -R -O http://www.lua.org/ftp/lua-5.3.1.tar.gz |
6.2 lua基本语法
- Lua注释
单行注释用–,多行注释用–[[ ]]
- Lua语句
语句之间可以用分号”;”隔开,也可以用空白隔开
语句块用 do 和 end 括起来的 - Lua关键字,关键字不能做为变量
and break do else elseif end false for function if in local nil not or repeat return then true until while - 数值运算
支持 +, -, *, /,^,两个字符串用..连接,例:print(“hello "..“ketty") ---->>hello ketty
- 比较运算
< > <= >= == ~= —->>返回 true 或false - 逻辑运算
and, or, not
a and b:如果 a 为 false,则返回 a;否则返回 b
a or b :如果 a 为 true,则返回 a;否则返回 b
注: 在 Lua 中,只有 false 和 nil 才计算为 false,其它任 何数据都计算为 true,0 也是 true
local limit_speed_on = ngx.var.limit_speed_on or “0” —->>定义默认值的方法 - 运算符优先级,从高到低顺序如下
^ not - (一元运算) * / + ..(字符串连接) < > <= >= ~= == and or
6.3 lua变量定义
- 变量类型,可用type()函数查看
Nil空值,var1=nil –nil要小写
Boolean布尔值,var2=true
Number数值,var3=23.32
String字符串,var4=“string”,转义用”[[“和”]]”
Table关系表类型,T1={100,[12]=30,color=“red”}
Function函数类型,function add(a,b) return a+b end
Userdata 可以是宿主的任意数据类型,常用有 Struct 和指针
Thread线程类型,lua中没有真正的线程 - 变量定义
变量名字区分大小写,变量不需要声明,可同时给多个变量赋值
变量分为全局和局部变量,局部变量用local关键字
6.4 table用法
only data-structure mechanism in Lua
可以把这个类型看作是一个数组,在 Lua 中,你可以用任意类型来作为数组的索引,除了nil,例:
T1= {10, |
所有元素之间,总是用逗号”,”隔开
所有索引值都需要用”[“和”]”括起来;如果是字符串,还可以去掉引号和中括号
如果不写索引,则索引就会被认为是数字,并按顺序自动从 1 往后编
6.5 Function用法
- 函数定义
function (a,b) -- add 是函数名字,a 和 b 是参数名字 |
可变参数个数
function sum (a,b,…)返回多个结果
function () |
6.6 Lua控制语句
- 条件控制
if 条件 then … elseif 条件 then … else … end - While 循环
while 条件 do … end - Repeat 循环
repeat … until 条件 - For 循环
for 变量 = 初值,终点值,步进 do … end
6.7 Lua标准库
- Lua标准库包括
Math、IO、String、Table、OS和Debug - Lua第三方库包括
Mysql、Redis、Http、memcached等
require(mysql)
6.8 练习题,冒泡排序
function bub_sort(t) |
7. OpenResty
OpenResty
已经集成了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单编译安装
#tar xzvf ngx_openresty-VERSION.tar.gz |
- 目录结构
drwxr-xr-x 2 root root 4096 Mar 28 03:12 bin
drwxr-xr-x 6 root root 4096 Nov 1 2014 luajit
drwxr-xr-x 5 root root 4096 Nov 1 2014 lualib
drwxr-xr-x 11 root root 4096 Nov 1 2014 nginx
参考
http://www.lua.org
http://luajit.org
http://wiki.nginx.org/HttpLuaModule
https://github.com/openresty/lua-nginx-module
【Programming in Lua】