1. Lua 概念
Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
- Lua特性
轻量级:它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
可扩展:Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
2. Lua 环境安装
如果是使用windows,可以尝试使用 LuaDist,LuaDist 是一个真正的多平台包管理系统,为Lua语言提供模块的源代码和二进制存储库。
如果是Linux或Mac OS X,Lua已经安装在系统上,或有Lua软件包,安装下载即可。
- 源码构建
curl -R -O http://www.lua.org/ftp/lua-5.4.0.tar.gz
tar zxf lua-5.4.0.tar.gz
cd lua-5.4.0
make all test
make install
3. Lua基本语法
有C或Java语言基础学习Lua非常简单,我们可以创建第一个Lua程序!
- 交互式编程
Lua提供了交互式编程模式。可以在命令行中输入程序并立即查看效果。
Lua交互式编程模式可以通过命令lua -i
或lua
来启用:
- 标识符
Lua标示符用于定义一个变量,函数获取其他用户定义的项。标示符以一个字母A到Z或a到z或下划线_开头后加上0个或多个字母,下划线,数字(0到9)。
最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的。
Lua不允许使用特殊字符如@,$,和%来定义标示符。Lua是一个区分大小写的编程语言。因此在Lua中study与 STUDY是两个不同的标示符。以下列出了一些正确的标示符:
- 关键字
以下列出了Lua的保留关键字。保留关键字不能作为常量或变量或其他用户自定义标示符:
一般约定,以下划线开头连接一串大写字母的名字(比如_VERSION)被保留用于Lua内部全局变量。
- 全局变量
在默认情况下,变量总是认为是全局的。
全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是: nil。
Nginx 添加Lua模块
1. 安装LuaJit、ngx_devel_kit (NDK)、ngx_lua
1、编译安装LuaJit
wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
tar xzvf LuaJIT-2.0.5.tar.gz
cd LuaJIT-2.0.5
make PREFIX=/usr/local/luajit
make install PREFIX=/usr/local/luajit
2、下载 ngx_devel_kit (NDK)
wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz
tar xzvf v0.3.0.tar.gz
3、下载 ngx_lua
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.11.tar.gz
tar xvf v0.10.11.tar.gz
4、复制ngx_devel_kit (NDK)和ngx_lua解压文件
cp -r lua-nginx-module-0.10.11/ ngx_devel_kit-0.3.0/ /root/lua/nginx-1.12.2/lua/
2. 查看之前编译参数
./nginx -V
nginx version: nginx/1.12.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-http_gzip_static_module --with-http_sub_module
3. 集成添加lua
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0# 进入nginx源码解压目录中执行重新编译
./configure \
--prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-http_gzip_static_module --with-http_sub_module --add-module=/root/lua/nginx-1.12.2/lua/ngx_devel_kit-0.3.0/ --add-module=/root/lua/nginx-1.12.2/lua/lua-nginx-module-0.10.11 --with-ld-opt="-Wl,-rpath,/usr/local/luajit/lib"
- 编译(如果是第一次安装nginx需要执行make && make install,不需要在执行备份)
make
- 备份
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
/usr/local/nginx/sbin/nginx –s stop
cp objs/nginx /usr/local/nginx/sbin/
cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y
- 检查模块是否添加上
nginx -V
4. 测试Lua
编辑nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
location /lua {
set $test "hello,world";
content_by_lua '
ngx.header.content_type="text/plain"
ngx.say(ngx.var.test)';
}
}
Nginx调用lua模块指令
Nginx的可插拔模块化加载执行,共11个处理阶段
阶段 | 说明 |
---|---|
set_by_lua | 设置nginx变量,可以实现复杂的赋值逻辑 |
set_by_lua_file | |
access_by_lua | 请求访问阶段处理,用于访问控制 |
access_by_lua_file | |
content_by_lua | 内容处理器,接收请求处理并输出响应 |
content_by_lua_file | |
ngx.var | nginx变量 |
ngx.req.get headers | 获取请求头 |
ngx.req.get_uri_args | 获取url请求参数 |
ngx.redirect | 重定向 |
ngx.print | 输出响应内容体 |
ngx.say | 通 ngx.print,但是会最后输出一个换行符 |
ngx.header | 输出响应头 |
如果觉得有收获,欢迎点赞和评论,更多知识,请点击关注查看我的主页信息哦~
网友评论