ngx_lua_module是一个Nginx的http模块它把Lua解析器内嵌到Nginx中,从而可以让用户在Nginx 核心中直接运行Lua语言编写的程序。我们可以选择在 Nginx不同的请求处理阶段插入我们的Lua代码。这些Lua代码既可以直接内联在Nginx配置文件中,也可以单独放置在外部.lua文件里,然后在 Nginx 配置文件中引用.lua文件的路径。
最先将Nginx,Lua组合到一起的是OpenResty,它有一个ngx_lua模块,将Lua嵌入到了Nginx里面。那么为什么要这么做呢?因为:
支持Windows和Linux平台。 - 支持高并发高性能。
HTML网页中内嵌LUA脚本代码,类似于PHP。
支持非阻塞的数据库操作,目前只支持MYSQL。
支持异步的文件IO操作。
支持非阻塞的SOCKET IO操作。
安装这个地方只介绍在linux下的安装方法。前提是我们已经源码编译过了Nginx并且Nginx的安装路径是/usr/local/nginx,我们要做的就是将lua模块编译到Nginx中。所需要的模块如下:
1.安装luajit
wget http://luajit.org/download/LuaJIT-<version>.tar.gztar zxvf LuaJIT-<version>.tar.gz
cd LuaJIT-<version>
make
sudo make install PREFIX=/usr/local/luajit
下面需要配置一下 luajit 或 lua 的环境变量(Nginx编译时需要):
export LUAJIT_LIB=/path/to/luajit/libexport LUAJIT_INC=/path/to/luajit/include/luajit-2.0
2.安装 ngx_devel_kit (NDK) 模块
cd /usr/localgit clone https://github.com/simpl/ngx_devel_kit.git
下载完成后,将在 /usr/local/ 目录下生成子目录 ngx_devel_kit。
3.安装 lua-nginx-module 模块
cd /usr/localgit clone https://github.com/chaoslawful/lua-nginx-module.git
下载完成后,将在 /usr/local/ 目录下生成子目录 lua-nginx-module。
4.重新编译Nginx,需要注意编译顺序!
./configure --prefix=/usr/local/nginx--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"
--add-module=/usr/local/ngx_devel_kit
--add-module=/usr/local/echo-nginx-module
--add-module=/usr/local/lua-nginx-module
make -j2
make install
重新编译 Nginx 二进制,Nginx 需要 quit 再启动。而普通配置更新则 reload 即可:
kill -HUP `cat /path/nginx/logs/nginx.pid`/usr/local/nginx/sbin/nginx -s reload
模块编译成功! 重启Nginx服务器!
5.测试代码
在Nginx.conf 配置文件中,加入以下代码:
location /echo {default_type 'text/plain';
echo 'hello echo';
}
location /lua {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua")';
}
重启Nginx服务器!
/usr/local/nginx/sbin/nginx -s reload
使用curl测试:
[[email protected]] curl http://localhost/echohello echo
[[email protected]] curl http://localhost/lua
hello lua
测试结果表明,两个模块都安装成功!