在nginx中安装并调试OpenResty
OpenResty是基于Lua即时编译器(LuaJIT)对Nginx进行扩展的模块——最核心的就是 lua-nginx-module
这个模块。其他的都是 OpenResty基于lua开发的相关模块,当然也可以基于lua开发自己的第三方模块。
所以要想使用OpenResty首先必须安装 lua-nginx-module
。
-
下载并安装LuaJIT。可以使用源码方式安装,这个可以参考 官方文档非常详细。这里为了方便直接用apt安装了
1
sudo apt install luajit libluajit-5.1-dev
-
下载
ngx_devel_kit
模块1
2
3
4
5
6# 在nginx目录下创建一个modules目录
mkdir modules
# 从github克隆模块代码
git clone https://github.com/vision5/ngx_devel_kit/ modules/ngx_devel_kit
# 切换到v0.3.1版本
git checkout tags/v0.3.1 -b v0.3.1 -
下载
lua-nginx-module
模块1
2git clone https://github.com/openresty/lua-nginx-module modules/ngx_http_lua_module
git checkout tags/v0.10.20 -b v0.10.20如果是使用alibaba/tengine,这个模块已经被包含在tengine的
modules/ngx_http_lua_module
目录下了。另外注意 lua-nginx-module与nginx的兼容性,nginx1.6.0之前的版本是不支持的。
#编译nginx源码
-
如果需要对nginx进行debug的话,需要修改 /auto/cc/conf 文件,将
ngx_compile_opt="-c"
修改为ngx_compile_opt="-c -g"
-g
用来生成调试信息:详见 gcc文档 -
设置luajit的头文件和静态库的路径,ubuntu下可以用dpkg看看libluajit被安装到哪个目录了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22$ dpkg -L libluajit-5.1-dev
/.
/usr
/usr/include
/usr/include/luajit-2.1
/usr/include/luajit-2.1/lauxlib.h
/usr/include/luajit-2.1/lua.h
/usr/include/luajit-2.1/lua.hpp
/usr/include/luajit-2.1/luaconf.h
/usr/include/luajit-2.1/luajit.h
/usr/include/luajit-2.1/lualib.h
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libluajit-5.1.a
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/luajit.pc
/usr/share
/usr/share/doc
/usr/share/doc/libluajit-5.1-dev
/usr/share/doc/libluajit-5.1-dev/copyright
/usr/lib/x86_64-linux-gnu/libluajit-5.1.so
/usr/share/doc/libluajit-5.1-dev/changelog.Debian.gz然后设置两个环境变量
1
2export LUAJIT_LIB=/usr/lib/x86_64-linux-gnu/
export LUAJIT_INC=/usr/include/luajit-2.1/ -
执行
auto/configure
1
2
3
4auto/configure --prefix=nginx \
--with-ld-opt="-Wl,-rpath,/usr/lib/x86_64-linux-gnu/" \
--add-module=./modules/ngx_devel_kit \
--add-module=./modules/ngx_http_lua_module -
执行
make install
编译过程可能会比较慢,可以执行
make -j2 && make install
调大编译任务的个数
#调试OpenResty中的lua代码
首先你应该知道怎么调试Nginx,知道Nginx的多进程架构,这个可以看 上篇文章
首先需要关闭多进程架构,确保nginx运行在单个非守护进程,这样方便调试。
1 | daemon off; |
这里以一个第三方的lua模板引擎为例—— lua-resty-template
#安装lua模块
1 | # 在nginx下创建一个放lua脚本的目录 |
在 nginx.conf
中对lua模块进行配置
1 | http { |
在 html/templates
目录下添加模板文件
1 | <!DOCTYPE html> |
访问 localhost/templates/view.html
,能看到下面的结果